PYQT5

本文详细介绍了PyQt5中的多种控件及其使用方法,包括信号与槽的概念及应用,Label、TextBrowser、LineEdit的文本处理,RadioButton与GroupBox的选择功能,Dial与Slider的数据调整,以及QMessageBox和QInputDialog的交互对话框使用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.信号与槽

控件触发后,直接发射信号,信号可以发射到其他控件上或者不连接其他控件。信号必须和槽函数绑定,槽函数用来实现具体的功能
信号 比如说clicked() pressed()等等,代表一个动作
手动连接信号与槽的方法:

self.connect(widgets, SIGNAL('signal_name'), func) 
# func为自定义的槽函数 widgets参数是发出信号的控件

self.connect(widgets, SIGNAL('signal_name'), instance.methodname)
# instance.methodname是预定义的槽函数

self.connect(widgets, SIGNAL('signal_name'), instance, SLOT('slotSignature'))

使用setup()函数中的QtCore.QMetaObject.connectSlotsByName(MainWindow)连接信号与槽

(1) 在eric中给部件添加自定义的槽函数 (第9集)
在ui文件上右键选择如图,在弹出来的窗口中选择具体的控件以及信号

在这里插入图片描述
(2)UI文件 -> 转为py文件 -> 对特定控件的槽函数进行编写

2. Label, Text Browser, Line Edit控件

在这里插入图片描述
在这里插入图片描述
Line Edit控件用于单行文本输入,显示
Text Browser用于多行

实现点击buttton_8 ,将Line Edit输入的字符串添加到Text Browser. 可以在button_8的槽函数中:

str = self.lineEdit.text
self.textBrowser.append(str)

textBrowser方法:
self.textBrowser.toPlainText() #文本框的纯文本内容

3. radiobutton , groupbox控件

前者是点选按钮,后者用于将多个单选按钮集中在一个组里,一个组的单选按钮互斥(只能选中一个),不同组的单选按钮不互斥

# 获取radionButton状态
self.radioButton.isChecked()   # 选中返回真 反之返回假

# 设置状态
self.radioButton.setChecked(True)   # 将radioButton选中

4. Dail(旋转式按钮控件),LCD Number控件,slider滑块控件

Dail也是一种按钮,所以也有相应的信号和槽函数,常用如下函数作为信号
on_dial_valueChanged(int)函数
奥术大师撒多
这个是它的槽函数,注意参数有个value

	@pyqtSlot(int)
    def on_dial_valueChanged(self, value):
        print (value)  # value值范围是0-99
        
        # 这是lcdNumber的方法 
        self.lcdNumber.display(value)
       

slider滑块控件基本一样

5. 弹出窗口 QMessageBox类(继承自PyQt5.QtWidgets)

官方文档:https://www.riverbankcomputing.com/static/Docs/PyQt5/api/qtwidgets/qmessagebox.html?highlight=qmessagebox#PyQt5.QtWidgets.QMessageBox

参考这两篇文章
https://blog.csdn.net/jia666666/article/details/81540785
https://blog.csdn.net/zhulove86/article/details/52524735
这几个窗口的返回值是Button. 取决于你传入的Button参数。
在这里插入图片描述

点击不同的按钮会返回不同的值

(1)information窗体,弹出一个提示信息,比如“登陆成功!”。在某个按钮的槽函数中,假设信号为clicked()

	@pyqtSlot()
    # 提示信息框
    # 假设已经from PyQt5.QtWidgets import QMessageBox
    def on_pushButton_3_clicked(self):
        """
        Slot documentation goes here.
        """
        result = QMessageBox.infomation(self, '提示', '内容', 	QMessageBox.Yes|QMessageBox.No,QMessageBox.Yes)  
        # QMessageBox.Yes|QMessageBox.No会产生yes和no两个按钮,第五个参数为默认选中按钮
        if result == QMessageBox.Yse:
        	....
        else :
        	....

		# QMessageBox.information函数执行后会弹出一个窗口,同时返回一个值1024
		# self代表MainWindown类的一个实例化对象,即选择在哪个窗口弹出窗口

(2)question窗体

类似
result = QMessageBox.question(self, '窗口名', '询问内容', QMessageBox.Yes|QMessageBox.No)
点击yes 和no 函数返回的值不同

6.标准输入对话框,QInputDialog控件类

https://zhuanlan.zhihu.com/p/29101077
一样的,首先要form PyQt5.QtWidgets import QInputDialog
(1)QInputDialog.getText 输入字符串
asd

	@pyqtSlot()
    def on_pushButton_7_clicked(self):
        """
        Slot documentation goes here.
        """
        result= QInputDialog.getText(self,  '输入',  '请输入信息')
        print(result)
        # 假设输入 哈哈哈
        # result == ('哈哈哈', True)

(2)QInputDialog.getInt 输入整数
在这里插入图片描述

	@pyqtSlot()
    def on_pushButton_8_clicked(self):
        """
        Slot documentation goes here.
        """
        result = QInputDialog.getInt(self, '输入整数', '输入一个整数', 30, 0, 100)
        # 30为默认值 0为最小值 100为最大值 必须有这几个参数

(3)QInputDialog.getItem 下拉框
在这里插入图片描述

	@pyqtSlot()
    def on_pushButton_9_clicked(self):
        """
        Slot documentation goes here.
        """
        sex = ['男',  '女']  # 先定义列表 作为待传参数
        result = QInputDialog.getItem(self,  '下拉框',  '选择性别', sex)
        # result[0]为 '男' 或 '女'   result[1]为 'True' 或 'False'

7.多个窗口(18集)

注:所说的主窗口文件是指带槽函数的那个文件,不是最基本的由UI文件转成的py文件 其他文件比如充值窗口文件同理

假设在主窗口点击充值按钮,弹出一个充值窗口。只需再新建一个dialog类型的ui文件,布局好后,在这里插入图片描述
该ui文件的带槽函数的代码如下

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

"""
Module implementing Dialog.
"""

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import pyqtSlot
from PyQt5.QtWidgets import QMainWindow, QApplication,  QMessageBox,  QInputDialog,  QDialog

from Ui_info import Ui_Dialog  # Ui_Dialog是充值窗口的ui文件里的类,负责控件布局

# 全局变量
charge_money = 0.0
temp_charge_money = 0.0

class Dialog(QDialog, Ui_Dialog):
    """
    Class documentation goes here.
    """
    def __init__(self, parent=None):
        """
        Constructor
        
        @param parent reference to the parent widget
        @type QWidget
        """
        super(Dialog, self).__init__(parent)
        self.setupUi(self)
    
    
    # 修改充值金额
    @pyqtSlot()
    def on_pushButton_clicked(self):
        """
        Slot documentation goes here.
        """
        global temp_charge_money
        temp_charge_money, ok = QInputDialog.getDouble(self, '充值',  '自定义充值金额', 5.0, 1.0, 100.0)
        self.lcdNumber_2.display(temp_charge_money)
    
    
    # 确定
    @pyqtSlot()
    def on_pushButton_2_clicked(self):
        """
        Slot documentation goes here.
        """
        # 点击确定会让修改金额生效
        global charge_money,  temp_charge_money
        charge_money = temp_charge_money
        print(charge_money)

if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    ui =Dialog()
    ui.show()
    sys.exit(app.exec_())
    
    

在充值按钮的槽函数内进行 充值窗口类的实例化,并运行。当然,在主窗口文件中要先导入充值窗口文件import info 才能调用Dialog类

# 充值
    @pyqtSlot()
    def on_pushButton_3_clicked(self):
        """
        Slot documentation goes here.
        """
        my_info = info.Dialog()
        my_info.exec_()
8. 显示图片 见视频教程
9. 启动界面 21集 QSplashScreen类

在主窗口文件中

if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)

    # 弹出初始化界面  QSplashScreen继承自QWidgets, QPixmap继承自QtGui   ':/images/imags/splashscreen.PNG'是复制过来的路径
    splash = QSplashScreen(QPixmap(':/images/imags/splashscreen.PNG'))
    splash.show()

    # 显示提示文字
    splash.showMessage('正在初始化....')
    time.sleep(0.1)
    splash.showMessage('加在字体....')
    time.sleep(0.1)
    splash.showMessage('加在模块....')
    time.sleep(0.1)

    # 避免初始化过程中卡死
    app.processEvents()

    # 运行主窗体
    ui =MainWindow()
    ui.show()

    # 运行完毕就结束启动界面
    splash.close()

    sys.exit(app.exec_())
10. 菜单栏 为每个选项添加槽函数

在这里插入图片描述
选项的名字是 actionname
在这里插入图片描述
它的信号一般是trigger
在这里插入图片描述

9文件操作

(1)打开文件,输出内容到多行文本框

@pyqtSlot()
    def on_actionopen_triggered(self):
        """
        Slot documentation goes here.
        """
        
        # QFileDialog继承自QWidgets  getOpenFileName返回元组,第一个元素是打开的文件的路径
        file_path = QFileDialog.getOpenFileName(self,'打开文件', '/')
        file_object = open(file_path[0])
        str = file_object.read()
        self.textBrowser.append(str)

(2)将多行文本框的内容保存,即写入一个新文件中

# 保存
    @pyqtSlot()
    def on_actionsave_triggered(self):
        """
        Slot documentation goes here.
        """
        my_data = self.textBrowser.toPlainText()
        file_path = QFileDialog.getSaveFileName(self,'保存', '/')
        file_object = open(file_path, 'a+')
        file_object.write(my_data)
        file_object.close()

(4)
一个最简单的登录实现

@pyqtSlot()
	# 输入信息后 按钮点击 登录 。此为pushbutton的槽函数 
    def on_pushButton_clicked(self):
        """
        Slot documentation goes here.
        """
        user_name = self.lineEdit.text()
        pass_word = self.lineEdit_2.text() 
        import pymysql

        # 打开数据库连接
        db = pymysql.connect("localhost", "root", "123456", "test")

        # 使用 cursor() 方法创建一个游标对象 cursor
        cursor = db.cursor()
        
        sql = 'SELECT password FROM user WHERE username="%s"'%(user_name)

        # 使用 execute()  方法执行 SQL 查询
        cursor.execute(sql)

        # 使用 fetchone() 方法获取单条数据.
        data = cursor.fetchone()
        
        # 判断密码对不对
        if data == None:
            print('用户名错误')
        elif pass_word == data[0]:
            print('登陆成功')
        else:
            print('密码错误')
        
        # 关闭数据库连接
        db.close()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值