PyQt5学习心得(三)简单入门——常用的控件:标签、文本框、下拉框、按钮、对话框

上一集简单介绍了PyQt5的自定义信号与信号断开。那么,接下来,我们需要了解一下PyQt5有哪些控件可以供我们使用。

一般来说,涉及到UI编程,会用到的控件无非就是如下几种类型:标签、文本框、按钮、下拉框、对话框、计数器、滑动条、分隔线、图像绘制控件、多媒体播放控件、日历控件、日期时间控件等等。

本文主要是介绍几种常用的控件:标签、文本框、下拉框、按钮、对话框。

标签(QLabel)

这个控件主要是显示文字,在第二集的自定义信号中已经出现过,在此就不再重复讲解。
传送门 >>> 标签控件的用法

文本框

常见的控件之一,用户UI交互输入和展示的主要控件。文本框可以分为单行文本框与多行文本框,比如账号密码的输入框就是单行文本框,可以输入文章的文本框就是多行文本框。

单行文本框(QLineEdit)

在之前代码的init_ui函数中,添加如下代码即可查看效果:

        self.label_1 = MyLabel(self, (10, 10, 100, 20), 'label_1', '我是标签:')
        self.line_edit = QLineEdit(self)
        self.line_edit.setObjectName('line_edit')
        self.line_edit.setGeometry(70, 10, 100, 20)
        self.line_edit.setText('我是单行文本框')
        # self.line_edit.setPlaceholderText('我是单行文本框')  # 自己看看是什么效果

单行文本框

多行文本框(QTextEdit)

        self.text_edit = QTextEdit(self)
        self.text_edit.setObjectName('text_edit')
        self.text_edit.setGeometry(10, 30, 100, 60)
        self.text_edit.setText('我是\n多行\n文本框')

多行文本框
看到这个多行文本框,我的第一反应是,咦?光标怎么在第一行的开头!这能忍?至于你能不能忍,反正我是不能。于是,在网上借鉴了一位兄台的代码(代码来源地):

        cursor = self.text_edit.textCursor()
        pos = len(self.text_edit.toPlainText())
        cursor.setPosition(pos)
        self.text_edit.ensureCursorVisible()
        self.text_edit.setTextCursor(cursor)

光标在最后一行的末尾

下拉框(QComboBox)

下拉框是展示数据常用的控件,不能输入,只能选择。

        self.combox = QComboBox(self)
        self.combox.setObjectName('combox')
        self.combox.setGeometry(70, 10, 40, 20)
        datas = ['111', '222', '222', '333']
        self.combox.addItems(datas)

此时你是不是会思考,这个下拉框点击了之后呢?然后就没有然后了吗?肯定要把当前选择的数据进行处理吧?正是如此:

        # 这一段就不用注释讲解了,如果看不懂,就再看看第一集的文章吧!
        def do_something():  # 仅作示范使用的函数
            idx = self.combox.currentIndex()
            QMessageBox.information(self, '哈哈哈', '你点了%s!' % datas[idx])
        # 这里activated可以换成currentTextChanged、currentIndexChanged试试效果
        self.combox.activated.connect(do_something)

下拉框及消息响应

按钮

最常见的控件,没有之一!形式也有很多种,这里我就不一一介绍了,常用的几种类型如下:
QPushButton,这个就是最普通的按钮了,你想编写一个计算器的话,就需要创建很多个这样的按钮了。使用方法见:第一集的文章

QRadioButton,单选按钮,点击时切换状态,即checked和unchecked。此控件支持2种信号:toggled和clicked。toggle信号在切换单选钮状态时发射,clicked信号在每次点击时都会发射。

QCheckBox,复选按钮,提供多种选择的按钮,被选中或取消选中,都会发射一个stateChaged信号。
下面看看单选和复选按钮如何创建:

        self.radio_btn = QRadioButton(self)
        self.radio_btn.setObjectName('radio_btn')
        self.radio_btn.setGeometry(120, 10, 100, 20)
        self.radio_btn.setText('我是单选按钮')

        self.check_btn = QCheckBox(self)
        self.check_btn.setObjectName('check_btn')
        self.check_btn.setGeometry(120, 30, 100, 20)
        self.check_btn.setText('我是复选按钮')

单选按钮和复选按钮
至于如何使用,大家结合第一集中的消息响应来自行尝试吧!总有需要自己动手的地方不是吗?
(其实是我实在是lan de写了,单选按钮一般都要有一个组合,然后还需要设置互斥,如果不设置互斥,那么除了长相更○之外,和复选按钮就没有什么区别了。。。)

对话框

其实在上面的例子里已经有用到对话框了,所以,我在这里也就不多做讲解了。直接贴一段对话框的代码吧!

    # 提示对话框
    def message_box(self, text, title='Info'):
        if title.lower() in ['error', '错误']:
            QMessageBox.critical(self.centralwidget, title, text)
        elif title.lower() in ['warning', '警告']:
            QMessageBox.warning(self.centralwidget, title, text)
        else:
            QMessageBox.information(self.centralwidget, title, text)

    # 询问对话框
    def slotQuestion(self):  
        button=QMessageBox.question(self, "Question",
                                    self.tr("是否从头查找?"),
                                    QMessageBox.Ok|QMessageBox.Cancel,
                                    QMessageBox.Ok)
        if button==QMessageBox.Ok:
            self.label.setText("Question button/Ok")
        elif button==QMessageBox.Cancel:
            self.label.setText("Question button/Cancel")
        else:  
            return 

    # 带3个按钮的警告对话框
    def slotWarning(self):  
        button=QMessageBox.warning(self,"Warning",  
                                   self.tr("是否保存对文档的修改?"),  
                                   QMessageBox.Save|QMessageBox.Discard|QMessageBox.Cancel,  
                                   QMessageBox.Save)  
        if button==QMessageBox.Save:  
            self.label.setText("Warning button/Save")  
        elif button==QMessageBox.Discard:  
            self.label.setText("Warning button/Discard")  
        elif button==QMessageBox.Cancel:  
            self.label.setText("Warning button/Cancel")  
        else:  
            return

    # 关于对话框
    def slotAbout(self):  
        QMessageBox.about(self,"About",self.tr("About示例"))  
        self.label.setText("About MessageBox")

    # 关于QT的对话框  
    def slotAboutQt(self):  
        QMessageBox.aboutQt(self,"About Qt")  
        self.label.setText("About Qt MessageBox") 

总结

今天的文章写得有点长,有点啰唆,希望大家能看明白!
下一集,我们将讲解一下PyQt5如何创建自定义控件!这个网上的教程比较少,敬请期待!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SoaringXu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值