我有一个附加了QMenu的QToolButton,其中的选项是通过读取文件来填充的。
当前,我已经对其进行编码,以便在我第一次执行该工具时填充/创建选项卡。但是,我在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()
中所详细介绍的那样?