简体   繁体   English

PyQt5 - 第二个 window 中的按钮在单击时不执行操作

[英]PyQt5 - button in second window is not doing action on click

Hello I have 2 python files:您好,我有 2 个 python 文件:

first one is called 'first.py', second is 'second.py':第一个称为“first.py”,第二个称为“second.py”:

My program is supposed to guide the user from first window to second window.我的程序应该引导用户从第一个 window 到第二个 window。

The problem is, the first window's button work fine when clicked.问题是,第一个窗口的按钮在单击时工作正常。 But in the second window, the buttons don't work even though they are "connected" to a function.但是在第二个 window 中,即使它们“连接”到 function,按钮也不起作用。

first.py第一个.py

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QLineEdit
import sys
from second import Ui_second



              

class Ui_mainwindow(object):
    def setupUi(self, mainwindow):
        mainwindow.setObjectName("mainwindow")
        mainwindow.resize(1039, 717)
        self.centralwidget = QtWidgets.QWidget(mainwindow)
        self.centralwidget.setObjectName("centralwidget")

        

        self.nextbutton1 = QtWidgets.QPushButton(self.centralwidget)


        self.nextbutton1.setGeometry(QtCore.QRect(550, 380, 80, 20))
        font = QtGui.QFont()
        font.setPointSize(9)
        self.nextbutton1.setFont(font)
        self.nextbutton1.setObjectName("nextbutton1")
        self.patientinfo_label = QtWidgets.QLabel(self.centralwidget)
        self.patientinfo_label.setGeometry(QtCore.QRect(360, 230, 191, 31))
        font = QtGui.QFont()
        font.setPointSize(11)
        self.patientinfo_label.setFont(font)
        self.patientinfo_label.setObjectName("patientinfo_label")

        self.lastname_label = QtWidgets.QLabel(self.centralwidget)
        self.lastname_label.setGeometry(QtCore.QRect(360, 270, 100, 31))
        font = QtGui.QFont()
        font.setPointSize(11)
        self.lastname_label.setFont(font)
        self.lastname_label.setObjectName("lastname_label")
        self.lastname_input = QtWidgets.QLineEdit(self.centralwidget)
        self.lastname_input.setGeometry(QtCore.QRect(460, 278, 150, 20))
        self.lastname_input.setObjectName("lastname_input")
        #self.lastname_input.returnPressed.connect(self.clicked)
        #self.lastname_input.returnPressed.connect(self.clicked)
        #self.lastname_input.returnPressed.connect(self.clicked)

        self.firstname_label = QtWidgets.QLabel(self.centralwidget)
        self.firstname_label.setGeometry(QtCore.QRect(360, 300, 100, 31))
        font = QtGui.QFont()
        font.setPointSize(11)
        self.firstname_label.setFont(font)
        self.firstname_label.setObjectName("firstname_label")
      
        

        self.telephone_label = QtWidgets.QLabel(self.centralwidget)
        self.telephone_label.setGeometry(QtCore.QRect(360, 330, 100, 31))
        font = QtGui.QFont()
        font.setPointSize(11)
        self.telephone_label.setFont(font)
        self.telephone_label.setObjectName("telephone_label")

        self.welcome = QtWidgets.QLabel(self.centralwidget)
        self.welcome.setGeometry(QtCore.QRect(260, 150, 471, 71))
        font = QtGui.QFont()
        font.setPointSize(16)
        font.setBold(True)
        font.setWeight(75)
        self.welcome.setFont(font)
        self.welcome.setObjectName("welcome")
        self.lastname_input_2 = QtWidgets.QLineEdit(self.centralwidget)
        self.lastname_input_2.setGeometry(QtCore.QRect(460, 308, 150, 20))
        self.lastname_input_2.setObjectName("lastname_input_2")
        self.lastname_input_3 = QtWidgets.QLineEdit(self.centralwidget)
        self.lastname_input_3.setGeometry(QtCore.QRect(460, 338, 150, 20))
        self.lastname_input_3.setObjectName("lastname_input_3")
        self.nextbutton1_2 = QtWidgets.QPushButton(self.centralwidget)
        self.nextbutton1_2.setGeometry(QtCore.QRect(460, 380, 80, 20))
        font = QtGui.QFont()
        font.setPointSize(9)
        self.nextbutton1_2.setFont(font)
        self.nextbutton1_2.setObjectName("nextbutton1_2")
        mainwindow.setCentralWidget(self.centralwidget)
        self.statusbar = QtWidgets.QStatusBar(mainwindow)
        self.statusbar.setObjectName("statusbar")
        mainwindow.setStatusBar(self.statusbar)

        self.retranslateUi(mainwindow)
        QtCore.QMetaObject.connectSlotsByName(mainwindow)
        mainwindow.setTabOrder(self.lastname_input, self.lastname_input_2)
        mainwindow.setTabOrder(self.lastname_input_2, self.lastname_input_3)
        mainwindow.setTabOrder(self.lastname_input_3, self.nextbutton1)
        mainwindow.setTabOrder(self.nextbutton1, self.nextbutton1_2)

        #self.lastname_input.returnPressed.connect(self.clicked)
        #self.lastname_input.returnPressed.connect(self.clicked)
        #self.lastname_input_3.returnPressed.connect(self.clicked)
        self.nextbutton1.clicked.connect(self.clicked1)

    def retranslateUi(self, mainwindow):
        _translate = QtCore.QCoreApplication.translate
        mainwindow.setWindowTitle(_translate("mainwindow", "VeriMed Tech"))
        self.nextbutton1.setText(_translate("mainwindow", "Next"))
        self.patientinfo_label.setText(_translate("mainwindow", "Patient Information"))
        self.lastname_label.setText(_translate("mainwindow", "Last name:"))
        self.firstname_label.setText(_translate("mainwindow", "First name:"))
        self.telephone_label.setText(_translate("mainwindow", "Telephone:"))
        self.welcome.setText(_translate("mainwindow", "Welcome to VeriMed Technologies"))
        self.nextbutton1_2.setText(_translate("mainwindow", "Exit"))


    def clicked1(self):
        print("passed first clicked test")
    
        mainwindow.close()
        ui = Ui_second()
        ui.setupUi(mainwindow)
        mainwindow.show()




        


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    mainwindow = QtWidgets.QMainWindow()
    ui = Ui_mainwindow()
    ui.setupUi(mainwindow)
    mainwindow.show()
    sys.exit(app.exec_())

second.py第二个.py

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QLineEdit
import sys



class Ui_second(object):
    
    def setupUi(self, second):
        second.setObjectName("second")
        second.resize(1039, 717)
        self.centralwidget = QtWidgets.QWidget(second)
        self.centralwidget.setObjectName("centralwidget")
        self.lastname_input = QtWidgets.QLineEdit(self.centralwidget)
        self.imagelabel = QtWidgets.QLabel(self.centralwidget)
        self.imagelabel.setGeometry(QtCore.QRect(130, 250, 201, 141))
        self.imagelabel.setText("")
        self.imagelabel.setPixmap(QtGui.QPixmap("databases/images/cartoon.png"))
        self.imagelabel.setScaledContents(True)
        self.imagelabel.setWordWrap(False)
        self.imagelabel.setObjectName("imagelabel")
        self.lastname_input.setGeometry(QtCore.QRect(460, 275, 200, 30))
        self.lastname_input.setObjectName("lastname_input")
        self.next = QtWidgets.QPushButton(self.centralwidget)
        self.next.setGeometry(QtCore.QRect(570, 430, 80, 20))
        font = QtGui.QFont()
        font.setPointSize(9)
        self.next.setFont(font)
        self.next.setObjectName("next")
        self.patientinfo_label = QtWidgets.QLabel(self.centralwidget)
        self.patientinfo_label.setGeometry(QtCore.QRect(360, 230, 191, 31))
        font = QtGui.QFont()
        font.setPointSize(12)
        font.setBold(True)
        font.setWeight(75)
        self.patientinfo_label.setFont(font)
        self.patientinfo_label.setObjectName("patientinfo_label")
        self.barcode_label = QtWidgets.QLabel(self.centralwidget)
        self.barcode_label.setGeometry(QtCore.QRect(360, 270, 100, 31))
        font = QtGui.QFont()
        font.setPointSize(11)
        self.barcode_label.setFont(font)
        self.barcode_label.setObjectName("barcode_label")
        self.medication_label = QtWidgets.QLabel(self.centralwidget)
        self.medication_label.setGeometry(QtCore.QRect(360, 320, 100, 31))
        font = QtGui.QFont()
        font.setPointSize(11)
        self.medication_label.setFont(font)
        self.medication_label.setObjectName("medication_label")
        font = QtGui.QFont()
        font.setPointSize(11)
        self.welcome = QtWidgets.QLabel(self.centralwidget)
        self.welcome.setGeometry(QtCore.QRect(260, 150, 471, 71))
        font = QtGui.QFont()
        font.setPointSize(16)
        font.setBold(True)
        font.setWeight(75)
        self.welcome.setFont(font)
        self.welcome.setObjectName("welcome")
        self.exit = QtWidgets.QPushButton(self.centralwidget)
        self.exit.setGeometry(QtCore.QRect(480, 430, 80, 20))
        font = QtGui.QFont()
        font.setPointSize(9)
        self.exit.setFont(font)
        self.exit.setObjectName("exit")
        self.medreal_label = QtWidgets.QLabel(self.centralwidget)
        self.medreal_label.setGeometry(QtCore.QRect(460, 323, 200, 30))
        self.medreal_label.setObjectName("medreal_label")
       
        second.setCentralWidget(self.centralwidget)
        self.statusbar = QtWidgets.QStatusBar(second)
        self.statusbar.setObjectName("statusbar")
        second.setStatusBar(self.statusbar)

        self.retranslateUi(second)
        QtCore.QMetaObject.connectSlotsByName(second)
        second.setTabOrder(self.lastname_input, self.next)
        second.setTabOrder(self.next, self.exit)

        self.lastname_input.returnPressed.connect(self.clicked2)
        self.next.clicked.connect(self.clicked2)

    def retranslateUi(self, second):
        _translate = QtCore.QCoreApplication.translate
        second.setWindowTitle(_translate("second", "MainWindow"))
        self.next.setText(_translate("second", "Next"))
        self.patientinfo_label.setText(_translate("second", "Medication"))
        self.barcode_label.setText(_translate("second", "Barcode:"))
        self.medication_label.setText(_translate("second", "Medication:"))
        
        self.welcome.setText(_translate("second", "Scan medication"))
        self.exit.setText(_translate("second", "Exit"))
        self.medreal_label.setText(_translate("second",""))
        
    def clicked2(self):        
        print("passed clicked 2test")
        

Do not modify the code generated by Qt Designer but create another class that inherits from the appropriate widget and use the initial class to fill it.不要修改由Qt Designer生成的代码,而是创建另一个继承自相应小部件的 class 并使用初始 class 来填充它。

I suggest you to carefully read the official guidelines about using Designer , and remember to never edit the output of pyuic https://www.riverbankcomputing.com/static/Docs/PyQt5/designer.html建议你仔细阅读官方的Designer使用指南,切记不要编辑 pyuic pyuicoutput://www.riverbankcomputing.com/static/Docs/PyQt5/designer.ZFC3629EZ883A

import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QLineEdit

#from second import Ui_second
class Ui_second(object):
    def setupUi(self, second):
        second.setObjectName("second")
        second.resize(1039, 717)
        self.centralwidget = QtWidgets.QWidget(second)
        self.centralwidget.setObjectName("centralwidget")
        self.lastname_input = QtWidgets.QLineEdit(self.centralwidget)
        self.imagelabel = QtWidgets.QLabel(self.centralwidget)
        self.imagelabel.setGeometry(QtCore.QRect(130, 250, 201, 141))
        self.imagelabel.setText("")
        self.imagelabel.setPixmap(QtGui.QPixmap("databases/images/cartoon.png"))
        self.imagelabel.setScaledContents(True)
        self.imagelabel.setWordWrap(False)
        self.imagelabel.setObjectName("imagelabel")
        self.lastname_input.setGeometry(QtCore.QRect(460, 275, 200, 30))
        self.lastname_input.setObjectName("lastname_input")
        self.next = QtWidgets.QPushButton(self.centralwidget)
        self.next.setGeometry(QtCore.QRect(570, 430, 80, 20))
        font = QtGui.QFont()
        font.setPointSize(9)
        self.next.setFont(font)
        self.next.setObjectName("next")
        self.patientinfo_label = QtWidgets.QLabel(self.centralwidget)
        self.patientinfo_label.setGeometry(QtCore.QRect(360, 230, 191, 31))
        font = QtGui.QFont()
        font.setPointSize(12)
        font.setBold(True)
        font.setWeight(75)
        self.patientinfo_label.setFont(font)
        self.patientinfo_label.setObjectName("patientinfo_label")
        self.barcode_label = QtWidgets.QLabel(self.centralwidget)
        self.barcode_label.setGeometry(QtCore.QRect(360, 270, 100, 31))
        font = QtGui.QFont()
        font.setPointSize(11)
        self.barcode_label.setFont(font)
        self.barcode_label.setObjectName("barcode_label")
        self.medication_label = QtWidgets.QLabel(self.centralwidget)
        self.medication_label.setGeometry(QtCore.QRect(360, 320, 100, 31))
        font = QtGui.QFont()
        font.setPointSize(11)
        self.medication_label.setFont(font)
        self.medication_label.setObjectName("medication_label")
        font = QtGui.QFont()
        font.setPointSize(11)
        self.welcome = QtWidgets.QLabel(self.centralwidget)
        self.welcome.setGeometry(QtCore.QRect(260, 150, 471, 71))
        font = QtGui.QFont()
        font.setPointSize(16)
        font.setBold(True)
        font.setWeight(75)
        self.welcome.setFont(font)
        self.welcome.setObjectName("welcome")
        self.exit = QtWidgets.QPushButton(self.centralwidget)
        self.exit.setGeometry(QtCore.QRect(480, 430, 80, 20))
        font = QtGui.QFont()
        font.setPointSize(9)
        self.exit.setFont(font)
        self.exit.setObjectName("exit")
        self.medreal_label = QtWidgets.QLabel(self.centralwidget)
        self.medreal_label.setGeometry(QtCore.QRect(460, 323, 200, 30))
        self.medreal_label.setObjectName("medreal_label")
       
        second.setCentralWidget(self.centralwidget)
        self.statusbar = QtWidgets.QStatusBar(second)
        self.statusbar.setObjectName("statusbar")
        second.setStatusBar(self.statusbar)

        self.retranslateUi(second)
        QtCore.QMetaObject.connectSlotsByName(second)
        second.setTabOrder(self.lastname_input, self.next)
        second.setTabOrder(self.next, self.exit)

#        self.lastname_input.returnPressed.connect(self.clicked2)
#        self.next.clicked.connect(self.clicked2)

    def retranslateUi(self, second):
        _translate = QtCore.QCoreApplication.translate
        second.setWindowTitle(_translate("second", "MainWindow"))
        self.next.setText(_translate("second", "Next"))
        self.patientinfo_label.setText(_translate("second", "Medication"))
        self.barcode_label.setText(_translate("second", "Barcode:"))
        self.medication_label.setText(_translate("second", "Medication:"))
        
        self.welcome.setText(_translate("second", "Scan medication"))
        self.exit.setText(_translate("second", "Exit"))
        self.medreal_label.setText(_translate("second",""))
        
#    def clicked2(self):        
#        print("passed clicked 2test")
              

class Ui_mainwindow(object):
    def setupUi(self, mainwindow):
        mainwindow.setObjectName("mainwindow")
        mainwindow.resize(1039, 717)
        self.centralwidget = QtWidgets.QWidget(mainwindow)
        self.centralwidget.setObjectName("centralwidget")
        self.nextbutton1 = QtWidgets.QPushButton(self.centralwidget)
        self.nextbutton1.setGeometry(QtCore.QRect(550, 380, 80, 20))
        font = QtGui.QFont()
        font.setPointSize(9)
        self.nextbutton1.setFont(font)
        self.nextbutton1.setObjectName("nextbutton1")
        self.patientinfo_label = QtWidgets.QLabel(self.centralwidget)
        self.patientinfo_label.setGeometry(QtCore.QRect(360, 230, 191, 31))
        font = QtGui.QFont()
        font.setPointSize(11)
        self.patientinfo_label.setFont(font)
        self.patientinfo_label.setObjectName("patientinfo_label")
        self.lastname_label = QtWidgets.QLabel(self.centralwidget)
        self.lastname_label.setGeometry(QtCore.QRect(360, 270, 100, 31))
        font = QtGui.QFont()
        font.setPointSize(11)
        self.lastname_label.setFont(font)
        self.lastname_label.setObjectName("lastname_label")
        self.lastname_input = QtWidgets.QLineEdit(self.centralwidget)
        self.lastname_input.setGeometry(QtCore.QRect(460, 278, 150, 20))
        self.lastname_input.setObjectName("lastname_input")
        #self.lastname_input.returnPressed.connect(self.clicked)
        #self.lastname_input.returnPressed.connect(self.clicked)
        #self.lastname_input.returnPressed.connect(self.clicked)

        self.firstname_label = QtWidgets.QLabel(self.centralwidget)
        self.firstname_label.setGeometry(QtCore.QRect(360, 300, 100, 31))
        font = QtGui.QFont()
        font.setPointSize(11)
        self.firstname_label.setFont(font)
        self.firstname_label.setObjectName("firstname_label")
        self.telephone_label = QtWidgets.QLabel(self.centralwidget)
        self.telephone_label.setGeometry(QtCore.QRect(360, 330, 100, 31))
        font = QtGui.QFont()
        font.setPointSize(11)
        self.telephone_label.setFont(font)
        self.telephone_label.setObjectName("telephone_label")

        self.welcome = QtWidgets.QLabel(self.centralwidget)
        self.welcome.setGeometry(QtCore.QRect(260, 150, 471, 71))
        font = QtGui.QFont()
        font.setPointSize(16)
        font.setBold(True)
        font.setWeight(75)
        self.welcome.setFont(font)
        self.welcome.setObjectName("welcome")
        self.lastname_input_2 = QtWidgets.QLineEdit(self.centralwidget)
        self.lastname_input_2.setGeometry(QtCore.QRect(460, 308, 150, 20))
        self.lastname_input_2.setObjectName("lastname_input_2")
        self.lastname_input_3 = QtWidgets.QLineEdit(self.centralwidget)
        self.lastname_input_3.setGeometry(QtCore.QRect(460, 338, 150, 20))
        self.lastname_input_3.setObjectName("lastname_input_3")
        self.nextbutton1_2 = QtWidgets.QPushButton(self.centralwidget)
        self.nextbutton1_2.setGeometry(QtCore.QRect(460, 380, 80, 20))
        font = QtGui.QFont()
        font.setPointSize(9)
        self.nextbutton1_2.setFont(font)
        self.nextbutton1_2.setObjectName("nextbutton1_2")
        mainwindow.setCentralWidget(self.centralwidget)
        self.statusbar = QtWidgets.QStatusBar(mainwindow)
        self.statusbar.setObjectName("statusbar")
        mainwindow.setStatusBar(self.statusbar)

        self.retranslateUi(mainwindow)
        QtCore.QMetaObject.connectSlotsByName(mainwindow)
        mainwindow.setTabOrder(self.lastname_input, self.lastname_input_2)
        mainwindow.setTabOrder(self.lastname_input_2, self.lastname_input_3)
        mainwindow.setTabOrder(self.lastname_input_3, self.nextbutton1)
        mainwindow.setTabOrder(self.nextbutton1, self.nextbutton1_2)

        #self.lastname_input.returnPressed.connect(self.clicked)
        #self.lastname_input.returnPressed.connect(self.clicked)
        #self.lastname_input_3.returnPressed.connect(self.clicked)
#        self.nextbutton1.clicked.connect(self.clicked1)

    def retranslateUi(self, mainwindow):
        _translate = QtCore.QCoreApplication.translate
        mainwindow.setWindowTitle(_translate("mainwindow", "VeriMed Tech"))
        self.nextbutton1.setText(_translate("mainwindow", "Next"))
        self.patientinfo_label.setText(_translate("mainwindow", "Patient Information"))
        self.lastname_label.setText(_translate("mainwindow", "Last name:"))
        self.firstname_label.setText(_translate("mainwindow", "First name:"))
        self.telephone_label.setText(_translate("mainwindow", "Telephone:"))
        self.welcome.setText(_translate("mainwindow", "Welcome to VeriMed Technologies"))
        self.nextbutton1_2.setText(_translate("mainwindow", "Exit"))


#    def clicked1(self):
#        print("passed first clicked test")
#        mainwindow.close()
#        ui = Ui_second()
#        ui.setupUi(mainwindow)
#        mainwindow.show()


class SecondWindow(QtWidgets.QMainWindow, Ui_second):        
    def __init__(self, parent=None):
        super(SecondWindow, self).__init__(parent)
        
        self.setupUi(self)
        self.parent = parent
        
        self.lastname_input.returnPressed.connect(self.clicked2)
        self.next.clicked.connect(self.clicked2) 

    def clicked2(self):        
        print("passed clicked 2test")
        
        # ...
        
        self.parent.show()
        self.hide()
        

class FirstWindow(QtWidgets.QMainWindow, Ui_mainwindow):        
    def __init__(self):
        super(FirstWindow, self).__init__()
        
        self.setupUi(self)
        
        self.nextbutton1.clicked.connect(self.clicked1)  

    def clicked1(self):
        print("passed first clicked test")
    
        self.secondWindow = SecondWindow(self)
        self.secondWindow.show()
        self.hide()
        

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
#    mainwindow = QtWidgets.QMainWindow()
#    ui = Ui_mainwindow()
#    ui.setupUi(mainwindow)
#    mainwindow.show()

    w = FirstWindow()
    w.show()
    sys.exit(app.exec_())

在此处输入图像描述

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

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