Python 将按钮连接到PyQt5中的函数不工作
我正在努力使自己变得更好Python 将按钮连接到PyQt5中的函数不工作,python,pyqt5,Python,Pyqt5,我正在努力使自己变得更好 confirminformation_ui.pushButton.clicked.connect(self.abss) 工作 my main.py,控制器: import sys, pdb from PyQt5 import QtWidgets, uic class MainWindow(): def __init__(self): main_ui.show() self.setSignals() def setSig
confirminformation_ui.pushButton.clicked.connect(self.abss)
工作
my main.py,控制器:
import sys, pdb
from PyQt5 import QtWidgets, uic
class MainWindow():
def __init__(self):
main_ui.show()
self.setSignals()
def setSignals(self):
main_ui.login_btn.clicked.connect(self.openConfirmation)
def openConfirmation(self):
Confirmation()
def closeWindow(self):
self.close()
class Confirmation():
def __init__(self):
main_ui.close()
confirminformation_ui.show()
self.setSignals()
def setSignals(self):
confirminformation_ui.pushButton.clicked.connect(self.abss)
def abss(self):
print("lineofabss")
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
main_ui = uic.loadUi('main_window.ui')
confirminformation_ui = uic.loadUi('confirm_information.ui')
appointments_ui = uic.loadUi('appointment_list.ui')
MainWindow = MainWindow()
sys.exit(app.exec_())
我的按钮不能与self.abs一起工作。但与任何全局函数一起工作。例如:
import sys, pdb
from PyQt5 import QtWidgets, uic
def debug():
print("works")
class MainWindow():
def __init__(self):
main_ui.show()
self.setSignals()
def setSignals(self):
main_ui.login_btn.clicked.connect(self.openConfirmation)
def openConfirmation(self):
Confirmation()
def closeWindow(self):
self.close()
class Confirmation():
def __init__(self):
main_ui.close()
confirminformation_ui.show()
self.setSignals()
def setSignals(self):
confirminformation_ui.pushButton.clicked.connect(debug)
def abss(self):
print("lineofabss")
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
main_ui = uic.loadUi('main_window.ui')
confirminformation_ui = uic.loadUi('confirm_information.ui')
appointments_ui = uic.loadUi('appointment_list.ui')
MainWindow = MainWindow()
sys.exit(app.exec_())
output: works
我只定义了一个全局函数debug(),并将其连接到pushButton,它就工作了。
为什么self.abs不起作用
确认信息
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Form</class>
<widget class="QWidget" name="Form">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>503</width>
<height>412</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QLabel" name="label_3">
<property name="text">
<string>Indian Mission Name</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="comboBox"/>
</item>
<item>
<widget class="QLabel" name="label_2">
<property name="text">
<string>Application ID (Filenumber)</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEdit_2"/>
</item>
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>Date of birth</string>
</property>
</widget>
</item>
<item>
<widget class="QCalendarWidget" name="calendarWidget">
<property name="locale">
<locale language="Hindi" country="India"/>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButton">
<property name="text">
<string>Submit</string>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>
形式
0
0
503
412
形式
印度使团名称
应用程序ID(文件号)
出生日期
提交
委任名单
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Form</class>
<widget class="QWidget" name="Form">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>314</width>
<height>471</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="1" column="0">
<widget class="QListWidget" name="listWidget"/>
</item>
<item row="5" column="0">
<widget class="QPushButton" name="pushButton_2">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>Confirm the appointment</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>Appointments:</string>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QComboBox" name="comboBox"/>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Select Date:</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QPushButton" name="pushButton">
<property name="text">
<string>About</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QPushButton" name="pushButton_3">
<property name="text">
<string>Logout</string>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>
形式
0
0
314
471
形式
假的
确认约会
约会:
选择日期:
关于
注销
main_window.ui
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>423</width>
<height>366</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<widget class="QWidget" name="centralwidget">
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>Filenumber</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="filenumber_lineedit"/>
</item>
<item>
<widget class="QLabel" name="label_2">
<property name="text">
<string>Passport No</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="passport_lineedit"/>
</item>
<item>
<widget class="QLabel" name="label_3">
<property name="text">
<string>OTP</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="otp_lineedit"/>
</item>
<item>
<widget class="QPushButton" name="generate_otp_btn">
<property name="text">
<string>Generate OTP</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="login_btn">
<property name="text">
<string>Login</string>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QStatusBar" name="statusbar"/>
</widget>
<resources/>
<connections/>
</ui>
主窗口
0
0
423
366
主窗口
文件号
护照号码
检察官办公室
生成OTP
Qt::水平
40
20
登录
我不知道细节,但它与在函数调用中作为方法参数传递的对象self
有关
您必须替换对方法的调用:
confirminformation_ui.pushButton.clicked.connect(self.abss)
使用lambda函数:
confirminformation_ui.pushButton.clicked.connect(lambda: self.abss())
对此不确定(没有main_window.ui、confirm_information.ui和appointment_list.ui,我无法运行代码并测试它)。但是在
openConfirmation()
中,您调用Confirmation()
来创建Confirmation类的对象。但您没有保留对它的任何引用,所以我想知道,当您单击按钮时,确认对象是否不再存在,并且没有self.abs。在调用Confirmation()
的行中,尝试将其分配给某个对象(例如,MainWindow()对象的属性)。这很有意义。我不知道在这种情况下能做些什么。此外,我在Confirmation()行中添加了这些ui文件,我试图将分配按钮链接到函数,但仍然不起作用。我做了def openConfirmation(self):conf=Confirmation()confirminformation_ui.butdown.clicked.connect(conf.abss)如果将其分配给局部变量,则没有任何帮助。这也超出了Confirmation()对象的范围。试试这个:`self.conf=Confirmation()'[也就是说,您正在将创建的Confirmation()对象分配给MainWindow()对象的一个属性,该属性不会超出范围,并保持不变]。我对您的代码进行了更改,这似乎对我很有效(至少,我看到消息“lineofabss”…),我不记得这个技巧。谢谢jfsturtz