-
אני מנסה ליצור תפריט משולב - אפשרויות רגילות ולצידן QFontCombobox. לצורך כך פעלתי לפי זה
יש לי שתי בעיות עם התוצאה:
א. התפריט Qmenu לא נסגר אוטומטית לאחר בחירת גופן.
ב. לא הצלחתי למצוא דרך לקשר את בחירת הגופן לפונקציה אחרת (בדוגמא להלן זה print פשוט).from PyQt5.QtCore import QObject from PyQt5.QtGui import QIcon, QFont, QCursor from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QFontComboBox, QWidgetAction, QMenu, QPushButton class Window(QWidget): def __init__(self): super().__init__() self.setWindowTitle("Pyside2 FontCombo Box") self.setGeometry(300,200,300,250) self.setFontBox() self.setIcon() self.show() def setIcon(self): appIcon = QIcon("icon.png") self.setWindowIcon(appIcon) def setFontBox(self): self.font_button = QPushButton(self) self.font_button.setFixedWidth(300) self.font_button.clicked.connect(lambda: self.setFontmenu()) vbox = QVBoxLayout() vbox.addWidget(self.font_button) self.setLayout(vbox) def setFontmenu(self): font_menu = QMenu() font_submenu = QFontComboBox() font_submenu.setCurrentFont(QFont("Arial")) objectTest = QObject() widget = QWidgetAction(objectTest) widget.setDefaultWidget(font_submenu) font_menu.addAction(widget) font_menu.exec_(QCursor.pos()) menu = font_menu menu.addSeparator() font_submenu.showPopup() font_submenu.setFocus() font_submenu.currentFontChanged.connect(self._changed) def _changed(self): font = self.currentFont().family() print(font) return myapp = QApplication(sys.argv) window = Window() myapp.exec_() sys.exit()
-
@הפצת-אנקי הקוד הבא עובד:
import sys from PyQt6.QtCore import QObject from PyQt6.QtGui import QIcon, QFont, QCursor from PyQt6.QtWidgets import QApplication, QWidget, QVBoxLayout, QFontComboBox, QWidgetAction, QMenu, QPushButton class Window(QWidget): def __init__(self): super().__init__() self.setWindowTitle("Pyside2 FontCombo Box") self.setGeometry(300,200,300,250) self.setFontBox() self.setIcon() self.show() def setIcon(self): appIcon = QIcon("icon.png") self.setWindowIcon(appIcon) def setFontBox(self): self.font_button = QPushButton(self) self.font_button.setFixedWidth(300) self.font_button.clicked.connect(self.setFontmenu) vbox = QVBoxLayout() vbox.addWidget(self.font_button) self.setLayout(vbox) def setFontmenu(self): self.font_menu = QMenu() self.font_submenu = QFontComboBox() self.font_submenu.setCurrentFont(QFont("Arial")) objectTest = QObject() widget = QWidgetAction(objectTest) widget.setDefaultWidget(self.font_submenu) self.font_menu.addAction(widget) self.font_submenu.currentFontChanged.connect(self._changed) self.font_menu.exec(QCursor.pos()) def _changed(self): font = self.font_submenu.currentFont().family() self.font_menu.close() print(font) return myapp = QApplication(sys.argv) window = Window() myapp.exec() sys.exit()
(שניתי ל-pyqt6 כי לא הצלחתי להתקין גירסה 5, הקוד פחות או יותר זהה עבור 5)
הבעיה היתה שפונקצייתQMenu.exec
חוזרת רק אחרי שהתפריט נסגר -
-