在 PyQt5 中拆分 Python 类
Splitting Python classes in PyQt5
我想将一个大的 class (UI
) 分成几个较小的,但我在访问 GUI 其余部分的其他字段时遇到问题。
我使用 QT Creator 创建了一个简单的 GUI,现在我想使用 PyQt5 对其进行编程。
当我将函数拆分为单独的 classes 并使用 verifyBtn
按钮时,出现错误:
self.hostname = self.IPInp.text()
AttributeError: 'bool' object has no attribute 'IPInp'
如果 verify_button
函数在 main UI
class 中,那么程序运行正常。您是否知道代码应该是什么样子,以便我可以将函数拆分为另一个 class?
from PyQt5.QtWidgets import *
from PyQt5 import uic
import os, sys
class ButtonHandler(QMainWindow):
def __init__(self) -> None:
super().__init__()
def verify_button(self):
self.hostname = self.IPInp.text()
response = os.system("ping -n 1 " + self.hostname)
if response == 0:
self.verifyBtn.setStyleSheet('QPushButton { color: green;}')
self.verifyBtn.setText("OK")
else:
self.verifyBtn.setStyleSheet('QPushButton { color: red;}')
self.verifyBtn.setText("NO")
class UI(QMainWindow):
def __init__(self):
super().__init__()
uic.loadUi("Test_gui.ui", self)
self.vBtn = ButtonHandler()
self.verifyBtn.clicked.connect(self.vBtn.verify_button)
if __name__ == '__main__':
app = QApplication([])
win = UI()
win.show()
sys.exit(app.exec_())
在 ButtonHandler
的 __init__-method
中,您可以通过以下方式传递对 UI
的引用(如果您使用 toplevel_ui
作为对 [=14= 的引用])
class ButtonHandler(QMainWindow):
def __init__(self, toplevel) -> None:
super().__init__()
self.toplevel_ui = toplevel_ui
所以当您从 UI
创建 ButtonHandler
的实例时,您现在写
self.vBtn = ButtonHandler(self)
然后当你想从 class ButtonHandler
访问 class UI
的属性时,你写 self.toplevel_ui.<attribute_name>
替换 <attribute_name>
随心所欲。例如 verifyBtn
或 verify_button
.
我想将一个大的 class (UI
) 分成几个较小的,但我在访问 GUI 其余部分的其他字段时遇到问题。
我使用 QT Creator 创建了一个简单的 GUI,现在我想使用 PyQt5 对其进行编程。
当我将函数拆分为单独的 classes 并使用 verifyBtn
按钮时,出现错误:
self.hostname = self.IPInp.text()
AttributeError: 'bool' object has no attribute 'IPInp'
如果 verify_button
函数在 main UI
class 中,那么程序运行正常。您是否知道代码应该是什么样子,以便我可以将函数拆分为另一个 class?
from PyQt5.QtWidgets import *
from PyQt5 import uic
import os, sys
class ButtonHandler(QMainWindow):
def __init__(self) -> None:
super().__init__()
def verify_button(self):
self.hostname = self.IPInp.text()
response = os.system("ping -n 1 " + self.hostname)
if response == 0:
self.verifyBtn.setStyleSheet('QPushButton { color: green;}')
self.verifyBtn.setText("OK")
else:
self.verifyBtn.setStyleSheet('QPushButton { color: red;}')
self.verifyBtn.setText("NO")
class UI(QMainWindow):
def __init__(self):
super().__init__()
uic.loadUi("Test_gui.ui", self)
self.vBtn = ButtonHandler()
self.verifyBtn.clicked.connect(self.vBtn.verify_button)
if __name__ == '__main__':
app = QApplication([])
win = UI()
win.show()
sys.exit(app.exec_())
在 ButtonHandler
的 __init__-method
中,您可以通过以下方式传递对 UI
的引用(如果您使用 toplevel_ui
作为对 [=14= 的引用])
class ButtonHandler(QMainWindow):
def __init__(self, toplevel) -> None:
super().__init__()
self.toplevel_ui = toplevel_ui
所以当您从 UI
创建 ButtonHandler
的实例时,您现在写
self.vBtn = ButtonHandler(self)
然后当你想从 class ButtonHandler
访问 class UI
的属性时,你写 self.toplevel_ui.<attribute_name>
替换 <attribute_name>
随心所欲。例如 verifyBtn
或 verify_button
.