我是PyQt的新手,我正在进行像应用程序这样的小聊天。我初始化了GUI并创建了几种管理用户输入的方法。问题是,我无法使用self.Method()指令,如网上教程所示。出于某种原因,Python告诉我对象没有属性' WIDGET' 其中WIDGET在这种情况下是QListWidget。
我设法使用findChild克服了这一点,但我不确定这是否正确。从PyQt上的方法中访问小部件的正确方法是什么?
这是我的代码:
import stuff *
class ASIMOV(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
QToolTip.setFont(QFont('SansSerif', 12))
botLog = QListWidget(self)
botLog.resize(150, 150)
botInput = QLineEdit(self)
botInput.returnPressed.connect(self.handleChatInput)
vbox = QVBoxLayout()
vbox.addWidget(botLog)
vbox.addWidget(botInput)
self.setLayout(vbox)
self.resize(600, 400)
self.show()
def startChat(self, botLog):
u = ASIMOV_user.User()
#Greet user
botLog.addItem('#: Hey there' + u.getName())
botChat = ASIMOV_chat.Chat()
def handleChatInput(self):
u = ASIMOV_user.User()
print(self.botLog.text())
botInput = self.findChild(QLineEdit, "")
botLog = self.findChild(QListWidget, "")
#lineEdits = self.findChildren(QLineEdit)
botLog.addItem('#' + u.getName() + ': ' + botInput.text())
#print(botInput.text())
if __name__=="__main__":
app = QApplication(sys.argv)
w = ASIMOV()
sys.exit(app.exec_())
另外,每次我想访问他们的方法时,我是否必须初始化一个类,例如来自ASIMOV_user类的getter?
答案 0 :(得分:1)
three_pineapples给出的答案。在这种情况下,原始代码具有声明的小部件,而不使用self运算符,这使得它们成为局部元素。
正如他所描述的,它只需要添加self.WIDGET以使它们可用于应用程序中的其余方法。
原始答案:
通过制作小部件来存储对小部件的引用 实例属性(例如self.botInput = QLineEdit(self))。然后你可以 从你的任何方法以相同的方式(self.botInput)访问它们 类。我建议运行一些关于对象的基本教程 使用Python进行面向编程以熟悉这些概念 您需要成功编写GUI程序