pyqt5+qt desiger实例教程(1)创建含有三个按钮的窗口,点击按钮2输出消息、按钮3可退出

pyqt5+qt desiger实例教程(1)创建含有三个按钮的窗口,点击按钮三可退出

目标:设计一个含有三个按钮的窗口,点击按钮2弹出消息,点击按钮3退出

在这里插入图片描述
如果是使用的anacoda那么自带qtdesiger,搜索qt.exe即可,建议使用everything进行搜索。如qt不能打开,参考:https://blog.csdn.net/weixin_43245453/article/details/90580002

第一步骤![在这里插入图片描述](https://img-blog.csdnimg.cn/20190603214922723.gif
新建一个widget
在这里插入图片描述
1559567451131

第二步:

在建立好的窗口之上,拖动三个Labe和三个QpushButton到窗口中去,QPushButton小部件提供了一个命令按钮。如下图所示

在这里插入图片描述

1559567423313

第三步骤:

在这一步之前需要对信号和槽有一定的认识,信号一般是按钮触发,而槽一般是定义的函数或者系统自带的功能(自我理解,望大佬指正)。在qtdesiger设计好界面之后,我们会在另外写一个程序去调用,而此时我们就需要把信号和槽链接起来,使用connect,此时你按下定义的按钮,那么按钮就会发出信号给你指定的槽,槽就是你指定的方法,因此此时就会调用你写的方法。

对各个LabelQpushButton进行自定义,分别改变objectNametextobjetNname需要设定一个自己能记得住的名字,因此在qtdesiger中仅仅是窗口界面,而逻辑的书写仍然需要自己编写,这个objectName是被用来作为信号使用。

在这里插入图片描述

1559567580528

分别对QpushButtonLabel进行自定义,QpushButtonobjectName分别改为button_1button_3button_2labelobjectName可以不进行更改,text更改显示如下
在这里插入图片描述
1559568327021

然后将文件保存,我保存的为stest.ui,需要对其转化为py文件才能进行调用,因此需对其进行转换

pyuic5 -o stest.py stest.ui

stets.py中的代码如下:

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'test.ui'
#
# Created by: PyQt5 UI code generator 5.9.2
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(695, 523)
        self.button_1 = QtWidgets.QPushButton(Form)
        self.button_1.setGeometry(QtCore.QRect(290, 70, 75, 23))
        self.button_1.setObjectName("button_1")
        self.button_2 = QtWidgets.QPushButton(Form)
        self.button_2.setGeometry(QtCore.QRect(290, 200, 75, 23))
        self.button_2.setObjectName("button_2")
        self.button_3 = QtWidgets.QPushButton(Form)
        self.button_3.setGeometry(QtCore.QRect(290, 310, 75, 23))
        self.button_3.setObjectName("button_3")
        self.label = QtWidgets.QLabel(Form)
        self.label.setGeometry(QtCore.QRect(130, 70, 54, 12))
        self.label.setObjectName("label")
        self.label_2 = QtWidgets.QLabel(Form)
        self.label_2.setGeometry(QtCore.QRect(140, 210, 54, 12))
        self.label_2.setObjectName("label_2")
        self.label_3 = QtWidgets.QLabel(Form)
        self.label_3.setGeometry(QtCore.QRect(140, 330, 54, 12))
        self.label_3.setObjectName("label_3")

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))
        self.button_1.setText(_translate("Form", "按钮1"))
        self.button_2.setText(_translate("Form", "按钮2"))
        self.button_3.setText(_translate("Form", "按钮3"))
        self.label.setText(_translate("Form", "1"))
        self.label_2.setText(_translate("Form", "2"))
        self.label_3.setText(_translate("Form", "3"))

第四部:新建一个.py文件调用

# -*- coding: utf-8 -*-
"""
Created on Mon Jun  3 21:31:18 2019

@author: innduce
"""

from PyQt5.QtWidgets import QApplication, QWidget, QMessageBox,QFileDialog
from stest import Ui_Form
import sys

class MyMain(QWidget,Ui_Form):#QWidget是因为创建的是QWidget类,Ui_Form创建窗口Form的objectName
    def __init__(self):
        super(MyMain, self).__init__()
        self.setupUi(self)

if __name__ =="__main__":
    app = QApplication(sys.argv)
    main = MyMain()
    main.show()#显示窗口
    sys.exit(app.exec_())

结果:
在这里插入图片描述
1559569090836

现在你点击按钮不会有任何变化,因为并没有对着三个按钮建立信号和槽,现在对按钮2、按钮3建立信号和槽

from PyQt5.QtWidgets import QApplication, QWidget, QMessageBox,QFileDialog
from stest import Ui_Form
import sys

class MyMain(QWidget,Ui_Form):
    def __init__(self):
        super(MyMain, self).__init__()
        self.setupUi(self)
        self.button_2.clicked.connect(self.tj)#建立信号和槽,button_2即为按钮2的objectName,tj为槽也就是自定义的方法
        self.button_3.clicked.connect(self.close)#close为内置方法(关闭)
        
    def tj(self):
        print('正在点击按钮2')

if __name__ =="__main__":
    app = QApplication(sys.argv)
    main = MyMain()
    main.show()
    sys.exit(app.exec_())

此时在点击按钮2就会在窗口显示:、点击按钮3就会自动退出
在这里插入图片描述
1559569464270

  • 5
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
抱歉,根据我使用的API,我无法在这个平台上提供完整的项目代码。但是,我可以提供一个基本框架,您可以根据自己的需求进行修改和实现。 #### 三层架构 在这个项目中,我们将使用三层架构:表示层、业务逻辑层和数据访问层。 - 表示层:使用PyQt5实现GUI界面,提供用户交互功能。 - 业务逻辑层:处理用户请求,调用数据访问层进行数据操作。 - 数据访问层:使用MySQL数据库进行数据的持久化操作。 #### 项目框架 1. 安装必要的库 ```python pip install PyQt5 pip install mysql-connector-python ``` 2. 创建MySQL数据库 在MySQL中创建一个名为`mydatabase`的数据库,并创建一个名为`students`的表,包含以下字段: - id: int - name: varchar(255) - age: int - gender: varchar(255) - major: varchar(255) 3. 创建GUI界面 使用Qt Designer创建GUI界面,并将其保存为`ui`文件。然后使用`pyuic5`工具将`ui`文件转换为Python文件。 ```python pyuic5 mygui.ui -o mygui.py ``` 4. 实现业务逻辑层 创建一个名为`student_service.py`的文件,并实现以下功能: - 获取所有学生信息 - 添加学生信息 - 修改学生信息 - 删除学生信息 ```python import mysql.connector class StudentService: def __init__(self): self.db = mysql.connector.connect( host="localhost", user="yourusername", password="yourpassword", database="mydatabase" ) self.cursor = self.db.cursor() def get_all_students(self): self.cursor.execute("SELECT * FROM students") return self.cursor.fetchall() def add_student(self, name, age, gender, major): sql = "INSERT INTO students (name, age, gender, major) VALUES (%s, %s, %s, %s)" val = (name, age, gender, major) self.cursor.execute(sql, val) self.db.commit() def update_student(self, id, name, age, gender, major): sql = "UPDATE students SET name=%s, age=%s, gender=%s, major=%s WHERE id=%s" val = (name, age, gender, major, id) self.cursor.execute(sql, val) self.db.commit() def delete_student(self, id): sql = "DELETE FROM students WHERE id=%s" val = (id,) self.cursor.execute(sql, val) self.db.commit() def __del__(self): self.db.close() ``` 5. 实现表示层 创建一个名为`myapp.py`的文件,并实现以下功能: - 连接数据库 - 显示所有学生信息 - 添加学生信息 - 修改学生信息 - 删除学生信息 ```python import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QTableWidgetItem from mygui import Ui_MainWindow from student_service import StudentService class MyApp(QMainWindow, Ui_MainWindow): def __init__(self): super().__init__() self.setupUi(self) self.student_service = StudentService() self.show_all_students() self.btn_add.clicked.connect(self.add_student) self.btn_update.clicked.connect(self.update_student) self.btn_delete.clicked.connect(self.delete_student) self.tableWidget.doubleClicked.connect(self.edit_student) def show_all_students(self): students = self.student_service.get_all_students() self.tableWidget.setRowCount(len(students)) for i, student in enumerate(students): id = QTableWidgetItem(str(student[0])) name = QTableWidgetItem(student[1]) age = QTableWidgetItem(str(student[2])) gender = QTableWidgetItem(student[3]) major = QTableWidgetItem(student[4]) self.tableWidget.setItem(i, 0, id) self.tableWidget.setItem(i, 1, name) self.tableWidget.setItem(i, 2, age) self.tableWidget.setItem(i, 3, gender) self.tableWidget.setItem(i, 4, major) def add_student(self): name = self.lineEdit_name.text() age = self.spinBox_age.value() gender = self.comboBox_gender.currentText() major = self.lineEdit_major.text() self.student_service.add_student(name, age, gender, major) self.show_all_students() def update_student(self): id = self.lineEdit_id.text() name = self.lineEdit_name.text() age = self.spinBox_age.value() gender = self.comboBox_gender.currentText() major = self.lineEdit_major.text() self.student_service.update_student(id, name, age, gender, major) self.show_all_students() def delete_student(self): id = self.lineEdit_id.text() self.student_service.delete_student(id) self.show_all_students() def edit_student(self): row = self.tableWidget.currentRow() id = int(self.tableWidget.item(row, 0).text()) name = self.tableWidget.item(row, 1).text() age = int(self.tableWidget.item(row, 2).text()) gender = self.tableWidget.item(row, 3).text() major = self.tableWidget.item(row, 4).text() self.lineEdit_id.setText(str(id)) self.lineEdit_name.setText(name) self.spinBox_age.setValue(age) self.comboBox_gender.setCurrentText(gender) self.lineEdit_major.setText(major) if __name__ == '__main__': app = QApplication(sys.argv) myapp = MyApp() myapp.show() sys.exit(app.exec_()) ``` 6. 运行程序 ```python python myapp.py ``` 7. 结束程序 ```python Ctrl+C ``` 这个项目只是一个基本框架,仅供参考。您可以根据自己的需求进行修改和实现

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值