• PyQt4开关按钮ToggleButton


    PyQt4没有开关按钮部件。但是我们可以使用在特殊状态下的QPushButton部件来创建开关按钮。而所谓的开关按钮就是一个具有按下和未按下两种状态的普通赶牛。用户可以通过单击按钮来切换其开或者关的状态。在一些情形下,这个特性会非常好用。

    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    
    import sys
    from PyQt4 import QtGui, QtCore 
    
    class ToggleButton(QtGui.QWidget):
        def __init__(self, parent = None):
            QtGui.QWidget.__init__(self, parent)
            self.color = QtGui.QColor(0, 0, 0)
            self.setGeometry(300, 300, 280, 170)
            self.setWindowTitle('ToggleButton')
            self.red = QtGui.QPushButton('Red', self)
            self.red.setCheckable(True)
            self.red.move(10, 10)
            self.connect(self.red, QtCore.SIGNAL('clicked()'), self.setRed)
            self.green = QtGui.QPushButton('Green', self)
            self.green.setCheckable(True)
            self.green.move(10, 60)
            self.connect(self.green, QtCore.SIGNAL('clicked()'), self.setGreen)
            self.blue = QtGui.QPushButton('Blue', self)
            self.blue.setCheckable(True)
            self.blue.move(10, 110)
            self.connect(self.blue, QtCore.SIGNAL('clicked()'), self.setBlue)
            self.square = QtGui.QWidget(self)
            self.square.setGeometry(150, 20, 100, 100)
            self.square.setStyleSheet('QWidget {background-color: %s}' % self.color.name())
            QtGui.QApplication.setStyle(QtGui.QStyleFactory.create('cleanlooks'))
            
        def setRed(self):
            if self.red.isChecked():
                self.color.setRed(255)
            else:
                self.color.setRed(0)
            self.square.setStyleSheet('QWidget {background-color: %s}' % self.color.name())
            
        def setGreen(self):
            if self.green.isChecked():
                self.color.setGreen(255)
            else:
                self.color.setGreen(0)
            self.square.setStyleSheet('QWidget {background-color: %s}' % self.color.name())
        
        def setBlue(self):
            if self.blue.isChecked():
                self.color.setBlue(255)
            else:
                self.color.setBlue(0)
            self.square.setStyleSheet('QWidget {background-color: %s}' % self.color.name())
        
    app =QtGui.QApplication(sys.argv)
    tb = ToggleButton()
    tb.show()
    sys.exit(app.exec_())
            
            

    效果:

    在这个例子中,我们创建了三个开关按钮和一个QWidget部件,并将QWidget部件的背景颜色设置为黑色。用户通过开关按钮从红、绿、蓝选择出QWidget部件的背景颜色组合。若开关按钮被按下,则其对应的颜色即被选中。

            self.color = QtGui.QColor(0, 0, 0)

    这行语句用来设置初始颜色,红绿栏三种颜色均为0时的颜色为黑色。

            self.red = QtGui.QPushButton('Red', self)
            self.red.setCheckable(True)

    通过创建一个QPushButton并将其设置为可选择的,即得到我们想要的开关按钮。

            self.connect(self.red, QtCore.SIGNAL('clicked()'), self.setRed)

    我们将red开关按钮的clicked()信号和自定义的setRed()方法连接起来。

            QtGui.QApplication.setStyle(QtGui.QStyleFactory.create('cleanlooks'))

    该行语句用来将应用程序的外观样式设置为cleanlooks的。之所以这样做时因为Linux下的默认样式存在一个小的缺陷,该缺陷使用户无法快速地分辨出开关按钮的两种状态。而采用cleanlooks样式外观的表现会好些。

            if self.red.isChecked():
                self.color.setRed(255)
            else:
                self.color.setRed(0)

    我们使用if语句来判断开关按钮的状态并设置对应的颜色值。

            self.square.setStyleSheet('QWidget {background-color: %s}' % self.color.name())

    使用setStyleSHeet()方法改变QWidget部件的背景色。

  • 相关阅读:
    总结DataTable,DataSet的使用方法。
    关闭子窗口刷新父窗体
    mysql中优化thread_concurrency的误区
    多看书
    shell导出mysql所有用户权限
    调整max_allowed_packet的大小
    Unknown table 'a' in MULTI DELETE的解决办法
    linux借助expect完成自动登录
    mysql的tmp_table_size和max_heap_table_size
    中英文职位对照
  • 原文地址:https://www.cnblogs.com/moonlightpoet/p/5357101.html
Copyright © 2020-2023  润新知