#python #pyqt5
#python #pyqt5
Вопрос:
Я запускаю приложение PyQt5, в котором есть кнопка, которая должна вызывать другой файл PyQt5 в отдельном окне. Я установил кнопку для вызова функции ‘main2’ в другом PyQt5, который .показать другой файл. Независимо они отлично работают, но когда я пытаюсь подключить их таким образом, я получаю сообщение об ошибке выше.
from ShowRecords import main2
class ExerciseTracker(QDialog):
def __init__(self):
super().__init__()
self.myWindow = QDialog()
#self.title = 'Exercise Tracker'
self.myWindow.setWindowTitle('Exercise Tracker')
self.setGeometry(200, 400, 300, 200)
self.move(60, 15)
self.layout = QFormLayout()
self.layout.addRow(QLabel('<h2>Welcome to the App!</h2>', parent=self.myWindow))
line_edit1 = QLineEdit()
self.layout.addRow('Day of the week: ', line_edit1)
line_edit2 = QLineEdit()
self.layout.addRow('Body Part: ', line_edit2)
line_edit3 = QLineEdit()
self.layout.addRow('Input Exercise: ', line_edit3)
line_edit4 = QLineEdit()
self.layout.addRow('Input Sets: ', line_edit4)
line_edit5 = QLineEdit()
self.layout.addRow('Input Reps: ', line_edit5)
btn1 = QPushButton('Submit')
self.layout.addRow(btn1)
btn2 = QPushButton('Show Records')
self.layout.addRow(btn2)
#btn1.clicked.connect('submit')
btn2.clicked.connect(main2)
# layout.addWidget()
self.myWindow.setLayout(self.layout)
self.myWindow.show()
def main():
exercise = QApplication(sys.argv)
view = ExerciseTracker()
#view.show()
sys.exit(exercise.exec_())
if __name__ =='__main__':
main()
Другой файл называется ShowRecord то, что я вызываю, это ‘
def main2():
import sys
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QWidget()
ui = Ui_Form()
ui.setupUi(Form)
Form.show()
sys.exit(app.exec_())
Ответ №1:
Вы можете проверить, запущен ли цикл событий, используя что-то вроде этого:
app = QtCore.QCoreApplication.instance()
if app is None:
app = QtWidgets.QApplication(sys.argv)
Однако почти наверняка есть лучший способ создать свой графический интерфейс. Один из вероятных способов — создать подкласс QWidget, который инкапсулирует поведение вашей Ui_Form и импортировать этот класс вместо другого метода main() . Затем вы можете использовать виджет ExerciseTracker для создания дочерних виджетов «Ui_Form», Что гарантирует все правильное управление памятью Qt и т. Д.