#python-3.x #pyqt5
Вопрос:
В моем приложении у меня есть 2 окна qmain. Файл пользовательского интерфейса, созданный с помощью pyuic5 и сохраненный в отдельных файлах. Когда я нажимаю кнопку в главном окне, открывается второе окно, называемое блок-окном. В этом окне в функции инициализации хранится метод «loaddata», и он загружает данные в QTableWidget. Однако, когда вы открываете второе окно, ничего не происходит. Но если вы отлаживаете отдельно файл BlockWindow(второе окно), он отлично работает. Можете ли вы подсказать, в чем на самом деле проблема?
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-49J58F3SQLEXPRESS;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-49J58F3SQLEXPRESS;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()
Комментарии:
1. Я полагаю, что ваша ошибка в этой строке
self.BlockWindow = QtWidgets.QMainWindow()
. На самом деле вы никогда не используете свой пользовательский класс, кроме класса по умолчанию.2. @mapf хорошо, вы можете помочь, как мне на самом деле нужно это заменить?
Ответ №1:
В своем MainWindow
классе попробуйте изменить свой openJournal
метод на этот:
def openJournal(self):
self.BlockWindow = BlockWindow()
self.BlockWindow.show()
И не забудьте импортировать свой класс в MainWindow.py:
from BlockWindow import BlockWindow