我正在尝试在 PyQt6 中打开第二个窗口。我有两个文件 - main.py 和 UI_elements.py - 前者导入后者。
在main.py中:
app = QtWidgets.QApplication([])
window = MainWindow(Ui_Translate)
window.show()
app.exec()
在 UI_elements.py 中调用此:
class MainWindow(QtWidgets.QMainWindow):
def __init__(self, ui_window):
super().__init__()
self.ui = ui_window()
self.ui.setupUi(self)`
效果很好。但是,尝试打开一个新窗口,方法是(1)使用参数 Ui_Translate_Cycles 重复 main.py 代码,(2)使 Ui_Translate.Cycles 成为 Ui_Translate 的子级,或(3)完全创建一个新类:
class Widget(QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.ui = Ui_Translate_Cycle()
self.ui.setupUi(self)
不起作用。
1 结果为
NameError: name 'MainWindow' is not defined. Did you mean: 'main_window'?
2 个结果为
AttributeError: 'Ui_Translate_Cycle' object has no attribute 'show'
3 个结果为
NameError: name 'Widget' is not defined. Did you mean: 'QtWidgets'?
非常感谢解决此问题的任何帮助。我是 PyQt6 的新手,因此对最佳实践的评论也将不胜感激 - 提前致谢。
MRE(注释2.py文件):
import sys
from UI_elements import *
def main_script():
app = QtWidgets.QApplication([])
window = MainWindow(Ui_Translate)
window.show()
app.exec()
def run_cycles(main_window, english_input):
number_of_cycles = english_input.blockCount()
contents = english_input.toPlainText()
new_window = Widget()
new_window.show()
print(f"number of cycles = {number_of_cycles}")
for line in contents.splitlines():
if line is not None:
continue
print("new line")
if __name__ == "__main__":
sys.exit(main_script())
class MainWindow(QtWidgets.QMainWindow):
def __init__(self, ui_window):
super().__init__()
self.ui = ui_window()
self.ui.setupUi(self)
class Widget(QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.ui = Ui_Translate_Cycle()
self.ui.setupUi(self)
class Ui_Translate(object):
def setupUi(self, Translate):
Translate.setObjectName("Translate")
Translate.resize(600, 600)
self.TranslateWidget = QtWidgets.QWidget(Translate)
self.TranslateWidget.setObjectName("TranslateWidget")
self.English_Input = QtWidgets.QPlainTextEdit(self.TranslateWidget)
self.English_Input.setGeometry(QtCore.QRect(210, 70, 301, 381))
self.English_Input.setObjectName("English_Input")
self.Translate_Button = QtWidgets.QPushButton(self.TranslateWidget)
self.Translate_Button.setGeometry(QtCore.QRect(40, 180, 130, 40))
self.Translate_Button.setObjectName("Translate_Button")
Translate.setCentralWidget(self.TranslateWidget)
self.retranslateUi(Translate)
QtCore.QMetaObject.connectSlotsByName(Translate)
self.cycle_window = Ui_Translate_Cycle()
self.Translate_Button.clicked.connect(lambda: main.run_cycles(self, self.English_Input))
def retranslateUi(self, Translate):
_translate = QtCore.QCoreApplication.translate
Translate.setWindowTitle(_translate("Translate", "MainWindow"))
self.Translate_Button.setText(_translate("Translate", "Translate"))
class Ui_Translate_Cycle(object):
def setupUi(self, Translate_Cycle):
Translate_Cycle.setObjectName("Translate_Cycle")
Translate_Cycle.resize(600, 600)
def retranslateUi(self, Translate_Cycle):
_translate = QtCore.QCoreApplication.translate
Translate_Cycle.setWindowTitle(_translate("Translate_Cycle", "Form"))
错误:或者,您可以显式导入:
from UI_elements import MainWindow, Ui_Translate
错误:在UI_elements.py中,应该从Ui_Translate类调用setupUi函数,即:
Ui_Translate.setupUi(self)
错误:在main.py中,
from PyQt6 import *