[QtWidget从另一个模块调用时未更新

问题描述 投票:-1回答:1

我有一个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中,我看不到它正在更新。我在做什么错?

python pyqt pyqt5
1个回答
0
投票

我想我已经解决了问题。在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")
© www.soinside.com 2019 - 2024. All rights reserved.