use*_*922 3 python pyqt tabbar pyqt4 tabwidget
我有一个标签小部件,其中包含 3 个标签。我需要在更改选项卡时发出信号,查看 pyQt 文档 currentChanged() 是在更改选项卡时发出的信号,但它对我不起作用。所以需要你的帮助来理解相同的,
我的代码如下:
main_tab_widget = QTabWidget()
#Creating Tabs
self.run_tab = QWidget()
self.cc_tab = QWidget()
self.result_tab = QWidget()
#Adding Tabs to Tab Widget
main_tab_widget.addTab(self.run_tab, "RUN")
main_tab_widget.addTab(self.cc_tab, "Config Creator")
main_tab_widget.addTab(self.result_tab, "Result")
#Layout Creation
main_layout = QVBoxLayout()
main_layout.addWidget(main_tab_widget)
self.connect(self.cc_tab, SIGNAL('currentChanged(int)'), self.pseudofunction)
self.RunTab()
self.setLayout(main_layout)
#self.configcreatortab()
#self.resulttab()
def pseudofunction(self):
print 'Inside Pseudo Function'
Run Code Online (Sandbox Code Playgroud)
您正在尝试连接currentChanged来自错误对象的信号。 main_tab_object是发出此信号的 QTabWidget,但您正试图从self.cc_tab其中一个选项卡中的 QWidget连接此信号。
更换线路
self.connect(self.cc_tab, SIGNAL('currentChanged(int)'), self.pseudofunction)
Run Code Online (Sandbox Code Playgroud)
和
self.connect(main_tab_widget, SIGNAL('currentChanged(int)'), self.pseudofunction)
Run Code Online (Sandbox Code Playgroud)
编辑:无法使用信号/插槽机制将不同的功能连接到 QTabWidget 的每个选项卡。如果要在选择不同的选项卡时调用不同的函数,则必须编写另一个函数,根据选择的选项卡调用相关函数。例如:
def selector(self, selected_index):
if selected_index == 0:
self.some_function_for_run_tab()
elif selected_index == 1:
self.some_function_for_cc_tab()
elif selected_index == 2:
self.some_function_for_result_tab()
Run Code Online (Sandbox Code Playgroud)
然后将currentChangedQTabWidget的信号连接到该函数。
你是正确的QTabBar也有currentChanged信号,但你在你的第二个评论它的使用,通过更换QWidget()用QTabBar()在你的代码上面,不会达到你想要的。
QTabBar 仅充当包含选项卡集合的栏。(实际上,QTabWidget 在其标签栏内使用了 QTabBar。)因此,将 QTabBar 放在 QTabWidget 中会为您提供标签内的标签。我不相信这是你想要的。此外,我怀疑您没有向 QTabBars 添加任何选项卡。QTabBars 确实有currentChanged信号,您的代码将正确连接这些信号,但这些信号永远不会触发,因为 QTabBars 不包含要更改的选项卡。
这些 QTabBars 本身可能在 QTabWidget 中的事实是无关紧要的。他们只能看到自己的选项卡集的更改,因此只能触发更改自己的选项卡集的信号。