-
אשמח לעזרה בתיכנות מבעלי ידע בפייתון.
היות ואני עורך את ממשק התוכנה של תוכנת אנקי כך שיהיה נוח יותר לשימוש, אני מעוניין לצמצם את כמות התפריטים בתוכנה.
לצורך כך, אני מנסה למחוק שני תפריטים הנקראים "כרטיסים" ו"רשומות" מסייר התוכנה באמצעות הפונקציה הבאה:def removeMenu(browser): browser.form.menu_Notes.deleteLater() browser.form.menu_Cards.deleteLater() addHook("browser.setupMenus", removeMenu)
הבעיה בזה היא שיש תפריט הקשר ש"שואב" את תוכן האפשרויות שבו מהתפריטים הנ"ל באמצעות הפונקציה
def _on_context_menu(self, _point: QPoint) -> None: menu = QMenu() if self.is_notes_mode(): main = self.browser.form.menu_Notes other = self.browser.form.menu_Cards other_name = tr.qt_accel_cards() else: main = self.browser.form.menu_Cards other = self.browser.form.menu_Notes other_name = tr.qt_accel_notes() for action in main.actions(): menu.addAction(action) menu.addSeparator() sub_menu = menu.addMenu(other_name) for action in other.actions(): sub_menu.addAction(action) gui_hooks.browser_will_show_context_menu(self.browser, menu) qtMenuShortcutWorkaround(menu) menu.exec(QCursor.pos())
ולכן הפעלה של הפונקציה הנ"ל גוררת את השגיאה הבאה:
Caught exception: Traceback (most recent call last): File "aqt\progress.py", line 54, in handler File "aqt\utils.py", line 965, in <lambda> File "aqt\browser\browser.py", line 442, in onRowChanged File "aqt\browser\browser.py", line 446, in _update_context_actions File "aqt\browser\browser.py", line 477, in _update_enabled_actions RuntimeError: wrapped C/C++ object of type QMenu has been deleted
וכן את השגיאה:
Caught exception: Traceback (most recent call last): File "aqt\webview.py", line 541, in handler File "aqt\editor.py", line 528, in <lambda> File "aqt\utils.py", line 965, in <lambda> File "aqt\browser\browser.py", line 442, in onRowChanged File "aqt\browser\browser.py", line 446, in _update_context_actions File "aqt\browser\browser.py", line 477, in _update_enabled_actions RuntimeError: wrapped C/C++ object of type QMenu has been deleted Caught exception: Traceback (most recent call last): File "aqt\browser\table\table.py", line 328, in _on_context_menu RuntimeError: wrapped C/C++ object of type QMenu has been deleted
כלומר, אין אפשרות למצוא את התפריטים הנ"ל.
הקריאה לפונקציה שמעדכנת את תפריט ההקשר נמצאת בקובץ
הזה בשורה 348.
הפונקציה עצמה נמצאת החל משורה 447.היות ואיני מתמצא בתכנות מאוד, רציתי לברר האם יש פקודה להחלפת תוכן הפונקציה כך שקריאה לפונקציה תבצע פעולה אחרת ממה שהיה במקור. (אני מעוניין לשנות את תפריט ההקשר כך שיציג דברים אחרים ולכן אני צריך "לשמור" עליו ולא להעלים אותו לגמרי).
רק אוסיף שפתרון מסוג למחוק את השורה הנ"ל לא ישים כרגע מבחינתי היות ואני מפתח הכל כתוסף לתוכנה ולא עורך את הקוד שלה בעצמה ולכן אני מחפש עקיפה באמצעות תוסף שיבצע את הנ"ל.
תודה מראש. -
נפתר בעזרת הפונקציה
def removeMenu(browser): browser.form.menu_Notes.setTitle("") browser.form.menu_Cards.setTitle("") addHook("browser.setupMenus", removeMenu)
שמוחקת את הסטרינג של כפתור התפריט וממילא הכפתור של התפריט נעלם אבל עדיין קיים.
תודה לכל מי שחשב על פיתרון. -