GUI界面分离程序无法获取按钮点击事件
使用pyqt5只做了一个GUI界面,但是不能获取按钮点击信号,也就是说用户输入用户名和密码,点击确认后获取不到用户的输入,下面是源码,请各位大神给指点一二https://img-bbs.csdn.net/upload/202101/30/1612018238_901635.png
GUI界面代码如下
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'untitled.ui'
#
# Created by: PyQt5 UI code generator 5.15.2
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_mainWindow(object):
def setupUi(self, mainWindow):
mainWindow.setObjectName("mainWindow")
mainWindow.resize(487, 381)
self.centralwidget = QtWidgets.QWidget(mainWindow)
self.centralwidget.setObjectName("centralwidget")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(300, 250, 111, 41))
self.pushButton.setObjectName("pushButton")
self.textBrowser = QtWidgets.QTextBrowser(self.centralwidget)
self.textBrowser.setGeometry(QtCore.QRect(10, 30, 221, 301))
self.textBrowser.setObjectName("textBrowser")
self.label_3 = QtWidgets.QLabel(self.centralwidget)
self.label_3.setGeometry(QtCore.QRect(10, 10, 54, 12))
self.label_3.setObjectName("label_3")
self.layoutWidget = QtWidgets.QWidget(self.centralwidget)
self.layoutWidget.setGeometry(QtCore.QRect(250, 40, 225, 141))
self.layoutWidget.setObjectName("layoutWidget")
self.gridLayout = QtWidgets.QGridLayout(self.layoutWidget)
self.gridLayout.setContentsMargins(0, 0, 0, 0)
self.gridLayout.setObjectName("gridLayout")
self.label = QtWidgets.QLabel(self.layoutWidget)
self.label.setObjectName("label")
self.gridLayout.addWidget(self.label, 2, 0, 1, 1)
self.lineEdit_2 = QtWidgets.QLineEdit(self.layoutWidget)
self.lineEdit_2.setText("")
self.lineEdit_2.setObjectName("lineEdit_2")
self.gridLayout.addWidget(self.lineEdit_2, 4, 1, 1, 1)
self.label_2 = QtWidgets.QLabel(self.layoutWidget)
self.label_2.setObjectName("label_2")
self.gridLayout.addWidget(self.label_2, 0, 0, 1, 1)
self.lineEdit = QtWidgets.QLineEdit(self.layoutWidget)
self.lineEdit.setText("")
self.lineEdit.setObjectName("lineEdit")
self.gridLayout.addWidget(self.lineEdit, 1, 1, 1, 1)
self.label_2.raise_()
self.label.raise_()
self.lineEdit_2.raise_()
self.lineEdit.raise_()
mainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(mainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 487, 23))
self.menubar.setObjectName("menubar")
self.menugui = QtWidgets.QMenu(self.menubar)
self.menugui.setObjectName("menugui")
self.menu = QtWidgets.QMenu(self.menubar)
self.menu.setObjectName("menu")
mainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(mainWindow)
self.statusbar.setObjectName("statusbar")
mainWindow.setStatusBar(self.statusbar)
self.actioncaidan = QtWidgets.QAction(mainWindow)
self.actioncaidan.setObjectName("actioncaidan")
self.menugui.addAction(self.actioncaidan)
self.menubar.addAction(self.menugui.menuAction())
self.menubar.addAction(self.menu.menuAction())
self.retranslateUi(mainWindow)
# self.pushButton.clicked.connect(self.button_clickked)
QtCore.QMetaObject.connectSlotsByName(mainWindow)
mainWindow.setTabOrder(self.lineEdit, self.lineEdit_2)
mainWindow.setTabOrder(self.lineEdit_2, self.pushButton)
mainWindow.setTabOrder(self.pushButton, self.textBrowser)
def retranslateUi(self, mainWindow):
_translate = QtCore.QCoreApplication.translate
mainWindow.setWindowTitle(_translate("mainWindow", "第一个GUI"))
self.pushButton.setText(_translate("mainWindow", "确认"))
self.label_3.setText(_translate("mainWindow", "信息栏:"))
self.label.setText(_translate("mainWindow", "请输入密码:"))
self.lineEdit_2.setPlaceholderText(_translate("mainWindow", "密码"))
self.label_2.setText(_translate("mainWindow", "请输入用户名:"))
self.lineEdit.setPlaceholderText(_translate("mainWindow", "用户名"))
self.menugui.setTitle(_translate("mainWindow", "文件"))
self.menu.setTitle(_translate("mainWindow", "关于"))
self.actioncaidan.setText(_translate("mainWindow", "caidan "))
之后有创建一个GUI1.py程序,实现界面分离,但是运行后,界面虽然现实正常,但是在界面输入用户名和密码后不能获取
以下是执行程序代码
import sys
from untitled import Ui_mainWindow
from PyQt5.QtWidgets import QApplication, QMainWindow, QFileDialog
class MainCode(QMainWindow, Ui_mainWindow):
def __init__(self):
QMainWindow.__init__(self)
Ui_mainWindow.__init__(self)
self.setupUi(self)
# super().setupUi(mainWindow)
self.pushButton.clicked.connect(self.on_save) #获取按钮点击
#信号槽
def on_save(self):
password = self.lineEdit_2.text()
name = self.lineEdit.text()
print(password)
print(name)
if __name__ == '__main__':
app = QApplication(sys.argv)
mainWindow = QMainWindow()# 创建主窗口
w = MainCode() # 调用ui中的ui_mainWindow类,并赋值给w
w.setupUi(mainWindow)# 调用ui文件中的ui_mainWindow类中的setupUi函数,并传给主窗口mainWindow
mainWindow.show()# 显示窗口
sys.exit(app.exec_())# 程序主循环 MainCode类初始化时直接将QMainWindow.__init__(self)
Ui_mainWindow.__init__(self)
合并为super().__init__()就可以了。
问题在if name == main那里,改为
if __name__ == '__main__':
app = QApplication(sys.argv)
mainWindow = MainCode()# 创建主窗口
mainWindow.show()# 显示窗口
sys.exit(app.exec_())# 程序主循环 hrp 发表于 2021-2-1 10:13
MainCode类初始化时直接将
合并为就可以了。
if name ==main为什么要这样写? 老麦2021 发表于 2021-2-1 10:38
if name ==main为什么要这样写?
因为maincode的初始化方法已经setupui并将信号连接槽函数了,你在name==main再setupui一次,ui就会覆盖到上一个ui上,而这次的按钮还没有将点击信号连接到槽函数,所以点击没反应。 hrp 发表于 2021-2-1 11:09
因为maincode的初始化方法已经setupui并将信号连接槽函数了,你在name==main再setupui一次,ui就会覆盖到 ...
我记得按照你说的这个办法改过,但是改完以后好像窗口就成空窗口了,没有按钮和输入框 老麦2021 发表于 2021-2-1 13:33
我记得按照你说的这个办法改过,但是改完以后好像窗口就成空窗口了,没有按钮和输入框
maincode初始化方法改了没?
我用手机写的测不了。 本帖最后由 YunGuo 于 2021-2-1 14:58 编辑
这样写
import sys
from PyQt5.QtWidgets import *
import luntan# ui文件
class MainCode(QMainWindow):
def __init__(self):
QMainWindow.__init__(self)
self.main_ui = luntan.Ui_mainWindow()
self.main_ui.setupUi(self)
self.main_ui.pushButton.clicked.connect(self.on_save)
def on_save(self):
password = self.main_ui.lineEdit_2.text()
name = self.main_ui.lineEdit.text()
print(password)
print(name)
if __name__ == '__main__':
app = QApplication(sys.argv)
win = MainCode()
win.show()
app.exit(app.exec_())
或者这样
import sys
from PyQt5.QtWidgets import *
from luntan import Ui_mainWindow
class MainCode(QMainWindow, Ui_mainWindow):
def __init__(self):
super(MainCode, self).__init__()
self.setupUi(self)
self.pushButton.clicked.connect(self.on_save)
def on_save(self):
password = self.lineEdit_2.text()
name = self.lineEdit.text()
print(password)
print(name)
if __name__ == '__main__':
app = QApplication(sys.argv)
win = MainCode()
win.show()
app.exit(app.exec_()) YunGuo 发表于 2021-2-1 14:48
这样写
两种方法全部都是窗口没有控件,不显示任何按钮与输入框
由于不能上传图片,只能放到网盘
链接: https://pan.baidu.com/s/1hPv72_R02Us6tK3yYHRM9Q 提取码: hnn5 hrp 发表于 2021-2-1 13:44
maincode初始化方法改了没?
我用手机写的测不了。
初始化方法也改了,只能显示一个空窗口,不能显示窗口中的控件 YunGuo 发表于 2021-2-1 14:48
这样写
两种方法都试了,只能显示一个空窗口,不能显示窗口中的控件 hrp 发表于 2021-2-1 13:44
maincode初始化方法改了没?
我用手机写的测不了。
感谢解答,程序已经按照您的方法完美解决 YunGuo 发表于 2021-2-1 14:48
这样写
感谢解答,问题已经处理完毕 YunGuo 发表于 2021-2-1 14:48
这样写
您好:
我有一个地方不是太明白,还请您给讲解一下
super(MainCode, self).__init__()这一句为什么要加上MainCode
class MainCode(QMainWindow, Ui_mainWindow):
def __init__(self):
super(MainCode, self).__init__()
self.setupUi(self)
self.pushButton.clicked.connect(self.on_save) 老麦2021 发表于 2021-2-1 19:08
两种方法全部都是窗口没有控件,不显示任何按钮与输入框
由于不能上传图片,只能放到网盘
链接: https: ...
我执行都没有问题,你执行有问题,兄弟你看看你写的代码和我的对比,哪里写多了,哪里写少了呢?至少我看你网盘这张图片,就有一个问题,if __name__ == '__main__':下面调用那个QMainWindow是啥? 老麦2021 发表于 2021-2-1 19:55
您好:
我有一个地方不是太明白,还请您给讲解一下
super(MainCode, self).__init__()这一句为什么要 ...
这个也是初始化的作用,和super().__init__()作用一样。写法不同,看你个人习惯吧。
页:
[1]