我有一个pyqt项目,该项目的主窗口(main.py)带有2个标签(view.py)。我在view.py中有一个按钮,用于更新另一个类(在另一个模块中)的标题。该按钮似乎已执行,但标题未更改。下面是这些代码的精简版本。
main.py
from PyQt5 import QtCore, QtGui, QtWidgets
from view import TabView
class UIWindow(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
self.central_widget = QtWidgets.QWidget(MainWindow)
self.grid_nav = QtWidgets.QGridLayout(self.central_widget)
self.grid_layout_container = QtWidgets.QGridLayout()
self.tabWidget = QtWidgets.QTabWidget(self.central_widget)
self.tabWidget.addTab(TabView().tab, "Tab1")
self.tabWidget.addTab(TabView().tab2.tab, "Tab2")
self.grid_layout_container.addWidget(self.tabWidget)
self.grid_nav.addLayout(self.grid_layout_container)
def init_window(self, MainWindow):
MainWindow.resize(1158, 771)
MainWindow.setCentralWidget(self.central_widget)
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = UIWindow()
ui.init_window(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
view.py
from PyQt5 import QtWidgets, QtGui, QtCore
from tab2 import Tab2
class TabView(QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.tab = QtWidgets.QWidget()
self.btn = QtWidgets.QPushButton("Get Data", self.tab)
self.btn.clicked.connect(self.get_data)
self.tab2 = Tab2()
self.btn.clicked.connect(self.tab2.update_title)
def get_data(self):
print("blahblahblah")
tab2.py
from PyQt5 import QtWidgets, QtGui, QtCore
class Tab2(QtWidgets.QWidget):
def __init__(self, app):
super().__init__(app)
self.tab = QtWidgets.QWidget()
self.grid_layout = QtWidgets.QGridLayout(self.tab)
self.frame = QtWidgets.QFrame(self.tab)
self.grid_layout_frame = QtWidgets.QGridLayout(self.frame)
self.title = QtWidgets.QLabel(self.frame)
self.grid_layout_frame.addWidget(self.title)
def update_title(self):
self.title.setText("New Title") #function is called but label not updated
绝对调用了update_title函数-如果执行print(self.title.text())
,我将看到结果。但是在tabWidget中,我看不到它正在更新。我在做什么错?
我想我已经解决了问题。在main.py中,我添加了选项卡,但具有2个TabView实例-应该只是其中一个。
这是正确的方法,
self.tabWidget = QtWidgets.QTabWidget(self.central_widget)
self.tab_view = TabView()
self.tabWidget.addTab(self.tab_view.tab, "Tab1")
self.tabWidget.addTab(self.tab_view.tab2.tab, "Tab2")