简体   繁体   English

将按钮连接到 PyQt5 中的功能不起作用

[英]Connect button to a function in PyQt5 not working

I am trying to make我正在努力

confirminformation_ui.pushButton.clicked.connect(self.abss)

work.工作。

my main.py, the controller:我的 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_())

my pushButton not work with self.abss.我的按钮不适用于 self.abss。 But works with any global function.但适用于任何全局函数。 For example:例如:

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

I only defined a global funcion debug() and i connected it to pushButton, and it worked.我只定义了一个全局函数 debug() 并将它连接到 pushButton,它工作正常。 Why do the self.abss not work?为什么 self.abss 不起作用?

confirminformation_ui确认信息_ui

<?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>

appointmentlist_ui约会列表_ui

<?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>

main_window.ui 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>

I don't know the fine details, but it has to do with the object self being passed along as a parameter of your method in the function call.我不知道细节,但它与对象self在函数调用中作为方法的参数传递有关。

You have to replace the call to your method:您必须替换对您的方法的调用:

confirminformation_ui.pushButton.clicked.connect(self.abss)

with a lambda function:使用 lambda 函数:

confirminformation_ui.pushButton.clicked.connect(lambda: self.abss())

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM