אשמח לעזרה בתיכנות מבעלי ידע בפייתון.
היות ואני עורך את ממשק התוכנה של תוכנת אנקי כך שיהיה נוח יותר לשימוש, אני מעוניין לצמצם את כמות התפריטים בתוכנה.
לצורך כך, אני מנסה למחוק שני תפריטים הנקראים "כרטיסים" ו"רשומות" מסייר התוכנה באמצעות הפונקציה הבאה:
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.
היות ואיני מתמצא בתכנות מאוד, רציתי לברר האם יש פקודה להחלפת תוכן הפונקציה כך שקריאה לפונקציה תבצע פעולה אחרת ממה שהיה במקור. (אני מעוניין לשנות את תפריט ההקשר כך שיציג דברים אחרים ולכן אני צריך "לשמור" עליו ולא להעלים אותו לגמרי).
רק אוסיף שפתרון מסוג למחוק את השורה הנ"ל לא ישים כרגע מבחינתי היות ואני מפתח הכל כתוסף לתוכנה ולא עורך את הקוד שלה בעצמה ולכן אני מחפש עקיפה באמצעות תוסף שיבצע את הנ"ל.
תודה מראש.