捐助郴维网
感谢您对郴维网的支持,你的支持将是郴维网持续发展的动力!
二维码
×
当前位置:郴维网 >Pyqt5 > 正文
1 2018.04

基本界面组件之Button(2)

点击次数:646 更新时间:2018-4-1 21:49:39  【打印此页

Button,作为界面中触发动作请求或者命令的一种方式,作为与用户进行的交互操作。PyQt中的Button根据不同的使用场景划分为不同的表现形式。Button的基类QAbstractButton,提供button的通用性功能,此类为抽象类,从因此不能实例化,由其他的Button类继承来实现不同的功能,不同的表现形式。


QRadioButton

class QRadioButton(QAbstractButton)
 |  QRadioButton(QWidget parent=None)
 |  QRadioButton(str, QWidget parent=None)

由此可见QRadioButton继承自QAbstractButton。单选按钮提供一个按钮和一个label,label用于显示对应的文本信息。单选按钮是一种开关按钮,可以切换为on或者off即checked或者unchecked。主要用途用于提供给用户‘one of many’选择。如果用户选择另外一个单选按钮,则之前的就被反选了。 
RaidoButton 默认是autoExclusive。对于继承自同一个父类Wdiget的单选按钮,他们属于同一个exclusive按钮组合。如果需要多个exclusive按钮组合的时候,需要将他们放在QButtonGroup。 
当单选按钮切换到on或者off的时候,就会发送toggled()的信号。绑定这个信号,在按钮状态发生改变的时候,触发相应的行为。

通过一个示例对QPushButton来进行说明:

#-*- coding:utf-8 -*-
'''
ToolButton
'''

from PyQt5.QtWidgets import QApplication, QWidget, QRadioButton, QStyleFactory, QVBoxLayout
import sys

class RadioButton(QWidget):
    def __init__(self):
        super(RadioButton,self).__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle("RadioButton")
        self.setGeometry(400,400,300,260)

        self._xpButton = QRadioButton("WindowsXP")                                     
        self._vistaButton = QRadioButton("WindowsVista")
        self._windowSButton = QRadioButton("Windows")
        self._xpButton.toggled.connect(lambda:self.changeStyle("WindowsXP"))
        self._vistaButton.toggled.connect(lambda:self.changeStyle("WindowsVista"))
        self._windowSButton.toggled.connect(lambda:self.changeStyle("Windows"))

        layout = QVBoxLayout()
        layout.addWidget(self._xpButton)
        layout.addWidget(self._vistaButton)
        layout.addWidget(self._windowSButton)
        layout.addStretch(1)

        self.setLayout(layout)
        self._xpButton.setChecked(True)
        self.changeStyle("Windows")

    def changeStyle(self,styleName):
        QApplication.setStyle(QStyleFactory.create(styleName))

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = RadioButton()
    ex.show()
    sys.exit(app.exec_()) 

运行之后的效果: 
说明: radioButton

控件说明:

控件类型

控件名称

文本

图标

QRadioButton

_xpButton

WindowsXP

 

QRadioButton

_vistaButton

WindowsVista

 

QRadioButton

_windowSButton

Windows

 

示例说明: 
通过选择单选框按钮,来切换不同的window界面风格,XP,Vista,Windows风格 
代码分析: 
其他代码部分可以参考上一篇《Pyqt5系列(二 )-第一个PyQt程序》中的说明。

L19~24:

self._xpButton = QRadioButton("WindowsXP")                                     
self._vistaButton = QRadioButton("WindowsVista")
self._windowSButton = QRadioButton("Windows")
self._xpButton.toggled.connect(lambda:self.changeStyle("WindowsXP"))
self._vistaButton.toggled.connect(lambda:self.changeStyle("WindowsVista"))
self._windowSButton.toggled.connect(lambda:self.changeStyle("Windows"))

创建_xpButton ,_vistaButton , _windowsButton三个单选框按钮,然后将切换开关发射的toggle信号和自定义槽函数changeStyle()绑定在一起。 
在绑定槽函数的时候,由于要传递参数,因此通过lambada来重新定义一个函数,此函数中传入了所需的参数。

L33:

self._xpButton.setChecked(True)

初始化设定_xpButton为选中状态。

L36~37:

def changeStyle(self,styleName): 
	QApplication.setStyle(QStyleFactory.create(styleName))

通过QStyleFactory.keys()可以获取到支持的style: 
[‘Windows’, ‘WindowsXP’, ‘WindowsVista’, ‘Fusion’] 
QApplication.setStyle()方法来设定界面显示的风格,这样可以根据自己的喜好来设定。


QCheckBox

class QCheckBox(QAbstractButton)
 |  QCheckBox(QWidget parent=None)
 |  QCheckBox(str, QWidget parent=None)

由此可见QCheckBox继承自QAbstractButton。 
同QRadioButton,QCheckBox也是一个开关按钮,可切换状态on或者off,即checked或者unchecked。 一般,此复选框可以enable或者disable但不影响其他复选按钮。但是如果此放置到一个互斥的QButtonGroup里面,则只能选一个复选框。这是有互斥选项的QButtonGroup所限定的属性。 
当checkbox复选框是checked标记或者清楚,都会触发stateChangeed信号。可以使用isChecked()去查询复选框按钮是否标记。除了常用的选中与没选中状态,QCheckBox提供第三种状态即“没有改变”状态。如果使用此状态,设置其属性setTristate(),然后用checkState()去查询当前标记切换的状态。

通过一个示例对QCheckBox来进行说明:

#-*- coding:utf-8 -*-
'''
CheckBox
'''

from PyQt5.QtWidgets import QApplication, QWidget, QCheckBox, QGroupBox, QStyleFactory, QVBoxLayout, QTextBrowser
import sys
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QFont

class CheckBox(QWidget):
    def __init__(self):
        super(CheckBox,self).__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle("CheckBox")
        self.setGeometry(400,400,300,260)

        groupBox = QGroupBox("Non-Exclusive Checkboxes")
        groupBox.setFlat(True)

        self.checkBox1 = QCheckBox("&Checkbox 1")
        self.checkBox2 = QCheckBox("C&heckbox 2")
        self.checkBox2.setChecked(True)
        self.tristateBox = QCheckBox("Tri-&state button")
        self.tristateBox.setTristate(True)
        self.tristateBox.setCheckState(Qt.PartiallyChecked)

        self.checkBox1.stateChanged.connect(self.changeCheckBoxStatus)
        self.checkBox2.stateChanged.connect(self.changeCheckBoxStatus)
        self.tristateBox.stateChanged.connect(self.changeCheckBoxStatus)

        vbox = QVBoxLayout()
        vbox.addWidget(self.checkBox1)
        vbox.addWidget(self.checkBox2)
        vbox.addWidget(self.tristateBox)
        vbox.addStretch(1)
        groupBox.setLayout(vbox)

        self.lcd = QTextBrowser()
        self.lcd.setFixedHeight(190)
        self.lcd.setFont(QFont("Microsoft YaHei", 20))
        self.lcd.setText(self.getCheckBoxStatus())

        mainLayout = QVBoxLayout()
        mainLayout.addWidget(groupBox)
        mainLayout.addWidget(self.lcd)
        self.setLayout(mainLayout)

    def changeCheckBoxStatus(self):
        self.lcd.setText(self.getCheckBoxStatus())
    def getCheckBoxStatus(self):
        status = self.checkBox1.text()+":  "+ str(self.checkBox1.checkState()) +"\n" +self.checkBox2.text()+":  "+ str(self.checkBox2.checkState()) \
                 +"\n"+self.tristateBox.text()+":  "+ str(self.tristateBox.checkState())
        return status


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = CheckBox()
    ex.show()
    sys.exit(app.exec_()) 

执行上述代码之后的结果如下: 
说明: CheckBox

控件说明:

控件类型

控件名称

文本

功能

QCheckBox

checkBox1

checkBox1

两个状态选择

QCheckBox

checkBox2

checkBox2

两个状态选择

QCheckBox

tristateBox

tristateBox

三个状态选择

QTextBrowser

lcd

 

显示checkBox的状态

示例说明: 
通过复选按钮的选择,在textBrowser中显示当前各个控件的名称和状态。 
代码分析: 
其他代码部分可以参考上一篇《Pyqt5系列(二 )-第一个PyQt程序》中的说明。

L24~26:

self.checkBox1 = QCheckBox("&Checkbox 1")
self.checkBox2 = QCheckBox("C&heckbox 2")
self.checkBox2.setChecked(True)

实例化checkBox1和checkBox2两个对象,并将checkBox2的状态设定为选中状态。 
设定快捷键的另外一种方式,使用“&”符号,如“&Checkbox 1”,则通过Alt+“c”可以完成鼠标点击对应的行为。

L27~29:

self.tristateBox = QCheckBox("Tri-&state button")
self.tristateBox.setTristate(True)
self.tristateBox.setCheckState(Qt.PartiallyChecked)

实例化tristateBox 对象; 
setTristate(),设定tristateBox 对象是否为三个状态。”True”,设定为三个状态。 
setCheckState(),设定checkBox的状态,具体状态如下: 
Qt.Unchecked 0 The item is unchecked. 
Qt.PartiallyChecked 1 The item is partially checked. Items in hierarchical models may be partially checked if some, but not all, of their children are checked. 
Qt.Checked 2 The item is checked.

L31~33:

        self.checkBox1.stateChanged.connect(self.changeCheckBoxStatus)
        self.checkBox2.stateChanged.connect(self.changeCheckBoxStatus)
        self.tristateBox.stateChanged.connect(self.changeCheckBoxStatus)

stateChanged(),QCheckBox状态改变时的信号。在信号发生改变的时候触发自定义的函数changeCheckBoxStatus()


对于button的使用,在具体操作的过程中可以参考一下PyQt5 reference class。

Tips
郴维网为您提供各类专业服务:
软件开发,电脑配件销售,WIFI路由器销售,上门电脑维修,上门安装系统,系统安装,软、硬件安装,电脑除尘清灰,显示器维修,WIFI安装调试,服务器维护,数据恢复,密码破解,网络布线,网络检修,打印机维修,打印机加碳粉,苹果电脑安装系统,苹果电脑安装双系统,监控安装维护,电脑外包,笔记本电脑维修,餐饮、美容行业软件安装 等。。。。。。
点击次数:646 更新时间:2018-4-1 21:49:39  【打印此页
关键词推荐:郴州电脑城 郴州电脑维修公司 维修电脑公司 郴州软件开发 上门电脑维修 上门安装系统 笔记本电脑维修 郴州打印机维修 打印机加碳粉 电脑安装双系统 苹果电脑双系统 液晶显示器维修 联想笔记本维修 联想笔记本维修电话 戴尔笔记本维修电话 郴州戴尔笔记本维修 戴尔笔记本郴州维修点 华硕笔记本维修点 郴州华硕笔记本维修 郴州笔记本上网维修
欢迎您,来自IP为:3.231.226.13 的朋友!您是第960553位访客; 其中 电脑访客746217位,手机访客214336位.当前在线人数1780位.最高记录是 1940