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部件的背景色。

PyQt4开关按钮ToggleButton的更多相关文章

  1. Android学习笔记-开关按钮ToggleButton和开关Switch

    本节给大家介绍的Android基本UI控件是:开关按钮ToggleButton和开关Switch,这两个其实都是开关组件,只是后者需要在Android 4.0以后才能使用 所以AndroidManif ...

  2. Android——滚动视图(ScrollView)图片视图(ImageView)、状态开关按钮(ToggleButton)、时钟

    xml <?xml version="1.0" encoding="utf-8"?> <!--滚动视图--> <ScrollVie ...

  3. 状态开关按钮(ToggleButton)和开关(Switch)

    ToggleButton支持的XML属性及相关方法1.android:checked----->setChecked(boolean) ----->设置该按钮是否被选中2.android: ...

  4. Android——图片视图(ImageView)、状态开关按钮(ToggleButton)、时钟、图片透明度、滚动和时间选择器

    activity_ui1.xml dth="wrap_content" android:layout_height="wrap_content" android ...

  5. ToggleButton与Switch

    状态开关按钮togglebutton和开关switch 状态开关按钮togglebutton和开关switch是由button派生出来的,本质也是按钮,支持BUtton的各种属性,从功能上看,Togg ...

  6. Android ToggleButton Example--开关按钮

    Android ToggleButton Example 在 Android 中,  “android.widget.ToggleButton” 是个特殊的类,可以渲染出一个“开关按钮” ,顾名思义, ...

  7. Android笔记——Android自定义控件

    目录: 1.自定义控件概述 01_什么是自定义控件 Android系统中,继承Android系统自带的View或者ViewGroup控件或者系统自带的控件,并在这基础上增加或者重新组合成我们想要的效果 ...

  8. Android-小tips

    1.只保留float类型的一位小数,  String.format("%.1f", float值)   2.android  edittext 限制输入内容:  android:d ...

  9. Android开发学习清单

    目录: 第1章 Android应用与开发环境1.1 Android的发展和历史1.1.1 Android的发展和简介1.1.2 Android平台架构及特性1.2 搭建Android开发环境1.2.1 ...

随机推荐

  1. 各种不同的mq

    目前业界有很多MQ产品,我们作如下对比: RabbitMQ 是使用Erlang编写的一个开源的消息队列,本身支持很多的协议:AMQP,XMPP, SMTP, STOMP,也正是如此,使的它变的非常重量 ...

  2. Java面向对象编程:封装,继承,多态

    Java面向对象的三大特征: 封装:通过Java的类来实现数据和操作方法的封装,对外界可以将每一个Java类都视为一个黑箱,只需调用该黑箱提供的方法即可完成你想要的操作. 继承:通过类的继承,将统一的 ...

  3. C语言 · 用宏求球的体积

    算法提高 7-1用宏求球的体积   时间限制:1.0s   内存限制:256.0MB      问题描述 使用宏实现计算球体体积的功能.用户输入半径,系统输出体积.不能使用函数,pi=3.141592 ...

  4. 树莓派Raspberry命令行配置无线网络连接

    前言: 树莓派有多种联网的方式,通过有线网或者通过无线网.通过有线网连接是比较简单的,在开启dhcp的路由器下,直接插上网线就可以联网,本文介绍树莓派无线联网的方式.再没联网的情况下,如果没有屏幕等外 ...

  5. 二、Redis命令行和配置文件redis.windows.conf

    一.Redis发送命令的两种方式 redis-cli -h localhost -p 6379redis-cli ping 返回pong 证明正常 二.命令返回值 1.状态回复,如ping命令 2.错 ...

  6. mvn 仓库地址修改

    默认仓库的存储位置 Maven缺省的本地仓库路径为${user.home}/.m2/repository具体如下图 自定义修改仓库的存储位置: 可改变默认的 .m2 目录下的默认本地存储库文件夹通过修 ...

  7. 运行带distance field的Hiero

    从http://libgdx.badlogicgames.com/releases/下载zip包并解压,切换到解压后的目录,执行: java -cp gdx.jar;gdx-natives.jar;g ...

  8. IntelliJ IDEA 14 利用JRebel实现热部署

    特别鸣谢:http://wlb.wlb.blog.163.com/blog/static/467413201522095132658/ ©IntelliJ IDEA开源社①群 185441009 鸣谢 ...

  9. hibernate中一对多多对一关系设计的理解

    1.单向多对一和双向多对一的区别? 只需要从一方获取另一方的数据时 就使用单向关联双方都需要获取对方数据时 就使用双向关系 部门--人员 使用人员时如果只需要获取对应部门信息(user.getdept ...

  10. ubuntu 12.04 LTS server 中文乱码【转】

    ubuntu 12.04 LTS server 中文乱码 最近装了一台ubuntu 12.04 server装完后是没有桌面的,后来又手动安装了桌面,但进行后发现桌面是乱码,应该是缺少字体在googl ...