У меня есть QToolButton, к которому прикреплено QMenu, где параметры заполняются при чтении файла.
В настоящее время я закодировал его для заполнения / создания вкладок при первом запуске инструмента.Однако у меня возникла проблема с QToolButton, когда мне нужно инициализировать .click()
для фактического заполнения пунктов меню, прежде чем я смогу выполнить итерации действий QMenu.
Проблема заключается в том, что я использую .click()
,меню остается во всплывающем режиме, и вкладки не создаются, пока я не выполню щелчок мышью где-нибудь на моем экране.
Пробовал с помощью .animateClick(10)
, и та же проблема тоже ...
Примерсодержимого файла:
coke
water
tea
И в случае, если я добавлю что-то новое в файл, я все равно могу нажать на кнопку и добавить оттуда новую опцию.
class MyWin(QtGui.QMainWindow):
def __init__(self, parent=None):
super(MyWin, self).__init__()
self.ui_setup()
self.populate_tabs_at_start()
def ui_setup(self):
central_widget = QtGui.QWidget()
self.setCentralWidget(central_widget)
vlay = QtGui.QVBoxLayout(central_widget)
hlay = QtGui.QHBoxLayout()
vlay.addLayout(hlay)
vlay.addStretch()
self.add_button = QtGui.QToolButton()
self.tab_bar = QtGui.QTabBar(self)
self.add_button.setIcon(QtGui.QIcon('add.png'))
self.qmenu = QtGui.QMenu(self.add_button)
self.add_button.setMenu(self.qmenu)
self.add_button.setPopupMode(QtGui.QToolButton.InstantPopup)
self.qmenu.aboutToShow.connect(self.set_menu)
self.tab_bar.setTabButton(
0,
QtGui.QTabBar.ButtonPosition.RightSide,
self.add_button
)
hlay.addWidget(self.add_button)
hlay.addWidget(self.tab_bar)
@QtCore.pyqtSlot()
def set_menu(self):
with open('/Desktop/item_file.txt') as f:
menu_options = f.read().splitlines()
self.qmenu.clear()
for opt in menu_options:
self.qmenu.addAction(opt, partial(self.set_new_tab, opt))
def set_new_tab(self, opt):
self.tab_bar.addTab(opt)
def populate_tabs_at_start(self):
# need to click on the button to derive the menu
self.add_button.click()
# The menu does pops up but it did not go away which I thought it will,
# unless I perform a mouse-click somewhere within my screen
#self.add_button.animateClick(10)
# get the menu actions within self.qmenu
menu_actions = self.qmenu.actions()
for act in menu_actions:
self.set_new_tab(act)
Кроме того, есть ли лучший способ обрабатывать / создавать вкладки, как я подробно описал в populate_tabs_at_start()
?