W e S D
0 1

读Pyqt4教程,带你入门Pyqt4 _006

窗口组件是应用程序的基本构建块。PyQt4编程工具包拥有范围广泛的各种窗口组件。按钮、选择框、滑块、列表框等等,程序员工作所需要的一切。在教程的这部分中,我们将介绍一些有用的窗口组件。

QCheckBox

QCheckBox (复选框) 是一个由两种状态的窗口组件。 OnOff 。他是一个带标签的框。每段一个复选框被选中和或者清楚时,都将发射信号 stateChanged()

#!/usr/bin/python
# -*- coding: utf-8 -*-

# checkbox.py

import sys
from PyQt4 import QtGui
from PyQt4 import QtCore


class Example(QtGui.QWidget):

    def __init__(self):
        super(Example, self).__init__()

        self.initUI()

    def initUI(self):

        self.setGeometry(300, 300, 250, 150)
        self.setWindowTitle('Checkbox')

        self.cb = QtGui.QCheckBox('Show title', self)
        self.cb.setFocusPolicy(QtCore.Qt.NoFocus)
        self.cb.move(10, 10)
        self.cb.toggle()
        self.connect(self.cb, QtCore.SIGNAL('stateChanged(int)'),
            self.changeTitle)

    def changeTitle(self, value):

        if self.cb.isChecked():
            self.setWindowTitle('Checkbox')
        else:
            self.setWindowTitle('')


if __name__ == '__main__':

    app = QtGui.QApplication(sys.argv)
    ex = Example()
    ex.show()
    app.exec_()

在我们的例子中,我们将创建一个复选框来切换窗口标题。

self.cb = QtGui.QCheckBox('Show title', self)

构建 QCheckBox

self.cb.setFocusPolicy(QtCore.Qt.NoFocus)

禁用 QCheckBox 的焦点。获由焦点的 QCheckBox 可以通过空格选择或者取消选择。

self.cb.toggle()

设置窗口标题,必须选中复选框。默认情况下,不设置窗口标题,复选框设为未选择。

self.connect(self.cb, QtCore.SIGNAL('stateChanged(int)'), self.changeTitle)

连接用户定义的 changeTitle()stateChanged() 信号。 changeTitle() 方法将切换窗口标题。

切换按钮

PyQt4没有切换按钮的窗口组件,为了创建切换按钮,我们使用特殊模式的 QPushButton 。切换按钮是指一个两种状态的按钮,按下和非按下。通过点击切换两种状态。在某种状态下来这种方式很合适。

#!/usr/bin/python
# -*- coding: utf-8 -*-

# togglebutton.py

import sys
from PyQt4 import QtGui
from PyQt4 import QtCore


class Example(QtGui.QWidget):

    def __init__(self):
        super(Example, self).__init__()

        self.initUI()

    def initUI(self):

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

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

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

        self.green = QtGui.QPushButton('Green', self)
        self.green.setCheckable(True)
        self.green.move(10, 60)

        self.connect(self.green, QtCore.SIGNAL('clicked()'), self.setColor)

        self.blue = QtGui.QPushButton('Blue', self)
        self.blue.setCheckable(True)
        self.blue.move(10, 110)

        self.connect(self.blue, QtCore.SIGNAL('clicked()'), self.setColor)

        self.square = QtGui.QWidget(self)
        self.square.setGeometry(150, 20, 100, 100)
        self.square.setStyleSheet("QWidget { background-color: %s }" %
            self.color.name())

        self.setWindowTitle('ToggleButton')
        self.setGeometry(300, 300, 280, 170)


    def setColor(self):

        source = self.sender()

        if source.text() == "Red":
            if self.red.isChecked():
                self.color.setRed(255)
            else: self.color.setRed(0)

        elif source.text() == "Green":
            if self.green.isChecked():
                self.color.setGreen(255)
            else: self.color.setGreen(0)

        else:
            if self.blue.isChecked():
                self.color.setBlue(255)
            else: self.color.setBlue(0)

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



if __name__ == '__main__':

    app = QtGui.QApplication(sys.argv)
    ex = Example()
    ex.show()
    app.exec_()

这个例子中,我们创建了三个切换按钮和一个窗口组件,设置窗口组件的背景为黑色。这些切换按钮将切换颜色值的红绿蓝部分。背景色依赖于我们按下哪个切换按钮。

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

这是初始颜色,没有红绿蓝等于黑色。

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

为了创建一个切换按钮,我们创建了一个 QPushButton 并通过 setCheckable 方法使之可选择。

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

连接 clicked 信号到自定义的方法。

source = self.sender()

获得切换的按钮。

if source.text() == "Red":
    if self.red.isChecked():
        self.color.setRed(255)
    else: self.color.setRed(0)

如果是红色按钮,我们更新颜色的红色部分。

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

通过样式表修改背景色。

 

 

本站文章为 宝宝巴士 SD.Team 原创,转载务必在明显处注明:(作者官方网站: 宝宝巴士 
转载自【宝宝巴士SuperDo团队】 原文链接: http://www.cnblogs.com/superdo/p/4542694.html

 

 

posted @ 2015-05-31 21:21  SD.Team  阅读(400)  评论(0编辑  收藏  举报