【发布时间】:2021-10-13 07:47:25
【问题描述】:
在我的应用程序中,我有 2 个 QMainWindows。使用 pyuic5 生成的 UI 文件并存储在单独的文件中。当我单击 MainWindow 中的按钮时,会打开另一个名为 BlockWindow 的窗口。在这个窗口中init func 存储方法“loaddata”,它加载QTableWidget 中的数据。但是,当您打开第二个窗口时,什么也没有发生。但是,如果您单独调试文件 BlockWindow(second window),它可以完美运行。你能提出问题的真正原因吗?
MainWindow.py
from MainWindowUI import Ui_MainWindow
from BlockWindowUI import Ui_BlockWindow
class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self, parent = None):
super(MainWindow, self).__init__(parent)
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.ui.pushButton.clicked.connect(self.loaddata)
self.ui.action.triggered.connect(self.openJournal)
self.ui.action_4.triggered.connect(exit)
self.ui.label_2 = QLabel('<h1 style="color: rgb(255, 255, 255);"></h1>')
self.loaddata()
def loaddata(self):
conn = pyodbc.connect(
"Driver={ODBC Driver 17 for SQL Server};Server=DESKTOP-49J58F3\SQLEXPRESS;Database=Plan;Trusted_Connection=yes;")
query = "SELECT nn, name, metering, volume, date_end, responsible, txt_name from dbo.Card_plan"
result = conn.execute(query).fetchall()
self.ui.tableWidget.clearSelection()
self.ui.tableWidget.setRowCount(0)
for row_number, row_data in enumerate(result):
self.ui.tableWidget.insertRow(row_number)
for column_number, data in enumerate(row_data):
self.ui.tableWidget.setItem(row_number, column_number, QtWidgets.QTableWidgetItem(str(data)))
conn.commit()
def openJournal(self):
self.BlockWindow = QtWidgets.QMainWindow()
self.ui = Ui_BlockWindow()
self.ui.setupUi(self.BlockWindow)
self.BlockWindow.show()
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
w = MainWindow()
w.show()
sys.exit(app.exec_())
BlockWindow.py
from BlockWindowUI import *
class BlockWindow(QtWidgets.QMainWindow, Ui_BlockWindow):
def __init__(self):
super(BlockWindow, self).__init__()
self.ui = Ui_BlockWindow()
self.ui.setupUi(self)
self.ui.pushButton_3.clicked.connect(self.dels)
self.ui.pushButton_4.clicked.connect(BlockWindow.close)
self.ui.label_2 = QLabel('<h1 style="color: rgb(255, 255, 255);"></h1>')
self.loaddata()
def loaddata(self):
conn = pyodbc.connect(
"Driver={ODBC Driver 17 for SQL Server};Server=DESKTOP-49J58F3\SQLEXPRESS;Database=Plan;Trusted_Connection=yes;")
query = "SELECT * from dbo.Block"
result = conn.execute(query).fetchall()
self.ui.tableWidget.setRowCount(0)
for row_number, row_data in enumerate(result):
self.ui.tableWidget.insertRow(row_number)
for column_number, data in enumerate(row_data):
self.ui.tableWidget.setItem(row_number, column_number, QtWidgets.QTableWidgetItem(str(data)))
conn.commit()
【问题讨论】:
-
我想你的错误在这一行
self.BlockWindow = QtWidgets.QMainWindow()。您实际上从未使用自定义类,而是使用默认类。 -
@mapf 好的,你能帮我换一下这个吗?
标签: python-3.x pyqt5