PyQt QTabBar 没有创建新标签
PyQt QTabBar is not creating new tabs
我正在尝试将新选项卡添加到 QTabBar 中,但没有成功。
我想要实现的是,当您点击 'add' 图标时,将出现 3 个菜单项。根据选择的项目,它会在 'add' 图标旁边创建一个新选项卡。
例如,如果我选择了选项 - food
,则 gui 将显示如下内容:
| + | food |
在我的 set_new_tab()
中,虽然它似乎已经打印出我选择的选项,但 addTab
似乎没有做任何事情。
想知道我是否遗漏了什么,或者 QTabBar
是否应该与 QTabWidget
结合使用?
这是我的代码:
class MyWin(QtGui.QMainWindow):
def __init__(self, parent=None):
super(MyWin, self).__init__()
self.tab_bar = QtGui.QTabBar()
self.add_button = QtGui.QToolButton(self)
self.add_button.setIcon(QtGui.QIcon('add.png'))
self.add_button.setMenu(self.set_menu())
self.add_button.setPopupMode(QtGui.QToolButton.InstantPopup)
self.tab_bar.setTabButton(
0,
QtGui.QTabBar.ButtonPosition.RightSide,
self.add_button
)
def set_menu(self):
menu_options = ['food', 'drinks', 'snacks']
qmenu = QtGui.QMenu(self.add_button)
for opt in menu_options:
qmenu.addAction(opt, partial(self.set_new_tab, opt))
qmenu.addAction
return qmenu
def set_new_tab(self, opt):
print ">>> opt clicked on : ", opt
self.tab_bar.addTab(opt) # This does not seems to creating new tabs..
感谢任何建议。
问题不在于在选项卡中创建,而是在于选项卡的大小很小并且在按钮后面,因此解决方案是使用布局正确放置小部件。
from functools import partial
from PyQt4 import QtGui
class MyWin(QtGui.QMainWindow):
def __init__(self, parent=None):
super(MyWin, self).__init__()
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.add_button.setMenu(self.set_menu())
self.add_button.setPopupMode(QtGui.QToolButton.InstantPopup)
self.tab_bar.setTabButton(
0,
QtGui.QTabBar.ButtonPosition.RightSide,
self.add_button
)
hlay.addWidget(self.add_button)
hlay.addWidget(self.tab_bar)
def set_menu(self):
menu_options = ['food', 'drinks', 'snacks']
qmenu = QtGui.QMenu(self.add_button)
for opt in menu_options:
qmenu.addAction(opt, partial(self.set_new_tab, opt))
qmenu.addAction
return qmenu
def set_new_tab(self, opt):
print(">>> opt clicked on : ", opt)
self.tab_bar.addTab(opt)
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
w = MyWin()
w.show()
sys.exit(app.exec_())
我正在尝试将新选项卡添加到 QTabBar 中,但没有成功。
我想要实现的是,当您点击 'add' 图标时,将出现 3 个菜单项。根据选择的项目,它会在 'add' 图标旁边创建一个新选项卡。
例如,如果我选择了选项 - food
,则 gui 将显示如下内容:
| + | food |
在我的 set_new_tab()
中,虽然它似乎已经打印出我选择的选项,但 addTab
似乎没有做任何事情。
想知道我是否遗漏了什么,或者 QTabBar
是否应该与 QTabWidget
结合使用?
这是我的代码:
class MyWin(QtGui.QMainWindow):
def __init__(self, parent=None):
super(MyWin, self).__init__()
self.tab_bar = QtGui.QTabBar()
self.add_button = QtGui.QToolButton(self)
self.add_button.setIcon(QtGui.QIcon('add.png'))
self.add_button.setMenu(self.set_menu())
self.add_button.setPopupMode(QtGui.QToolButton.InstantPopup)
self.tab_bar.setTabButton(
0,
QtGui.QTabBar.ButtonPosition.RightSide,
self.add_button
)
def set_menu(self):
menu_options = ['food', 'drinks', 'snacks']
qmenu = QtGui.QMenu(self.add_button)
for opt in menu_options:
qmenu.addAction(opt, partial(self.set_new_tab, opt))
qmenu.addAction
return qmenu
def set_new_tab(self, opt):
print ">>> opt clicked on : ", opt
self.tab_bar.addTab(opt) # This does not seems to creating new tabs..
感谢任何建议。
问题不在于在选项卡中创建,而是在于选项卡的大小很小并且在按钮后面,因此解决方案是使用布局正确放置小部件。
from functools import partial
from PyQt4 import QtGui
class MyWin(QtGui.QMainWindow):
def __init__(self, parent=None):
super(MyWin, self).__init__()
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.add_button.setMenu(self.set_menu())
self.add_button.setPopupMode(QtGui.QToolButton.InstantPopup)
self.tab_bar.setTabButton(
0,
QtGui.QTabBar.ButtonPosition.RightSide,
self.add_button
)
hlay.addWidget(self.add_button)
hlay.addWidget(self.tab_bar)
def set_menu(self):
menu_options = ['food', 'drinks', 'snacks']
qmenu = QtGui.QMenu(self.add_button)
for opt in menu_options:
qmenu.addAction(opt, partial(self.set_new_tab, opt))
qmenu.addAction
return qmenu
def set_new_tab(self, opt):
print(">>> opt clicked on : ", opt)
self.tab_bar.addTab(opt)
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
w = MyWin()
w.show()
sys.exit(app.exec_())