1. 程式人生 > >PyQt5的學習之路(七)

PyQt5的學習之路(七)

複選框

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

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QCheckBox
from PyQt5.QtCore import Qt


class Myform(QWidget):

    def __init__(self):

        super(Myform, self).__init__()

        self.initUI()

    def initUI(self):

        cb = QCheckBox('show title'
, self) cb.move(20, 20) cb.toggle() # 切換預設狀態為選中 # 當進行如下設定時,state會有三個值(0,1,2) # cb.setCheckState(1) cb.stateChanged.connect(self.changeTitle) self.setGeometry(300, 300, 300, 200) self.setWindowTitle('checkbox') self.show() # stateChanged訊號會傳入一個狀態引數(預設0和2)
def changeTitle(self, state): # print state if state == Qt.Checked: self.setWindowTitle('checkbox') else: self.setWindowTitle('') if __name__ == '__main__': app = QApplication(sys.argv) w = Myform() sys.exit(app.exec_())

切換按鈕

#! /usr/bin/python
# -*- coding: utf-8 -*- import sys from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QFrame from PyQt5.QtGui import QColor class Myform(QWidget): def __init__(self): super(Myform, self).__init__() self.initUI() def initUI(self): self.col = QColor(0, 0, 0) redb = QPushButton('Red', self) redb.setCheckable(True) redb.move(10, 10) # 這是一個獨立的事件, 點選傳遞一個bool值並觸發事件 redb.clicked[bool].connect(self.setColor) greenb = QPushButton('Green', self) greenb.setCheckable(True) greenb.move(10, 60) greenb.clicked[bool].connect(self.setColor) blueb = QPushButton('Blue', self) blueb.setCheckable(True) blueb.move(10, 110) blueb.clicked[bool].connect(self.setColor) self.square = QFrame(self) self.square.setGeometry(150, 20, 100, 100) self.square.setStyleSheet("QWidget { background-color: %s }" % self.col.name()) self.setGeometry(300, 300, 300, 200) self.setWindowTitle('togglebutton') self.show() def setColor(self, pressed): source = self.sender() # 事件傳送者名 if pressed: val = 255 else: val = 0 if source.text() == "Red": self.col.setRed(val) elif source.text() == "Green": self.col.setGreen(val) elif source.text() == "Blue": self.col.setBlue(val) else: print "未知錯誤" self.square.setStyleSheet("QFrame { background-color: %s }" % self.col.name()) if __name__ == '__main__': app = QApplication(sys.argv) w = Myform() sys.exit(app.exec_())

滑動條

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

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QSlider, QLabel, QFrame
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QColor


class Myform(QMainWindow):

    def __init__(self):

        super(Myform, self).__init__()

        self.initUI()

    def initUI(self):

        self.col = QColor(0, 0, 0)

        self.sldr = QSlider(Qt.Horizontal, self)    # 建立一個橫置的滑動條
        self.sldr.setFocusPolicy(Qt.NoFocus)
        self.sldr.setGeometry(30, 10, 100, 30)
        self.sldr.valueChanged[int].connect(self.changValue)
        self.sldr.setStatusTip('Red')

        self.lbr = QLabel(self)
        self.lbr.setGeometry(140, 10, 100, 30)


        self.sldg = QSlider(Qt.Horizontal, self)
        self.sldg.setFocusPolicy(Qt.NoFocus)
        self.sldg.setGeometry(30, 60, 100, 30)
        self.sldg.valueChanged[int].connect(self.changValue)
        self.sldg.setStatusTip('Green')

        self.lbg = QLabel(self)
        self.lbg.setGeometry(140, 60, 100, 30)


        self.sldb = QSlider(Qt.Horizontal, self)
        self.sldb.setFocusPolicy(Qt.NoFocus)
        self.sldb.setGeometry(30, 110, 100, 30)
        self.sldb.valueChanged[int].connect(self.changValue)
        self.sldb.setStatusTip('Blue')

        self.lbb = QLabel(self)
        self.lbb.setGeometry(140, 110, 100, 30)


        self.square = QFrame(self)
        self.square.setGeometry(180, 20, 100, 100)
        self.square.setStyleSheet("QFrame { background-color: %s }" % self.col.name())

        self.setGeometry(300, 300, 300, 200)
        self.setWindowTitle('slider')
        self.show()

        self.statusBar()

    def changValue(self, val):

        if self.sender() == self.sldr:
            self.lbr.setText(str(val * 255 / 99))    # 將99刻度轉換成255刻度
            self.col.setRed(val * 255/ 99)
        elif self.sender() == self.sldg:
            self.lbg.setText(str(val * 255 / 99))
            self.col.setGreen(val * 255/ 99)
        elif self.sender() == self.sldb:
            self.lbb.setText(str(val * 255 / 99))
            self.col.setBlue(val * 255/ 99)
        else: print "未知錯誤"

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

        self.statusBar().showMessage(self.col.name())   # 當顏色改變將顏色名寫到狀態列
        self.square.setStatusTip(self.col.name())




if __name__ == '__main__':

    app = QApplication(sys.argv)
    w = Myform()
    sys.exit(app.exec_())

進度條

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

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QProgressBar, QPushButton
from PyQt5.QtCore import QBasicTimer


class Myform(QWidget):

    def __init__(self):

        super(Myform, self).__init__()

        self.initUI()

    def initUI(self):

        # 這是兩個自定義的中間變數,後面會用到
        self.finish = 0
        self.beginAgain = 0

        self.pbar = QProgressBar(self)
        self.pbar.setGeometry(30, 40, 200, 25)

        self.btn = QPushButton('Start', self)
        self.btn.move(40, 80)
        self.btn.clicked.connect(self.doAction)

        self.timer = QBasicTimer()
        self.step = 0

        self.setGeometry(300, 300, 300, 200)
        self.setWindowTitle('progressbar')
        self.show()

    def doAction(self):

        source = self.sender()

        # 進度條到100%時觸發,點選時將中間變數self.beginAgain置為1
        if self.finish == 1:
            self.timer.start(100, self)
            self.btn.setText('Stop')
            self.beginAgain = 1

        elif self.timer.isActive():
            self.timer.stop()
            self.btn.setText('Start')

        else:
            self.timer.start(100, self)
            self.btn.setText('Stop')

    def timerEvent(self, e, s = 0):

        if self.step >= 100:

            if self.beginAgain == 0:
                self.timer.stop()
                self.btn.setText('BeginAgain')
                self.finish = 1

            # 進度條到100%並且點選按鈕觸發
            elif self.beginAgain == 1:
                self.step = 0
                self.beginAgain = 0

        else:
            self.finish = 0

        self.step = self.step + 1
        self.pbar.setValue(self.step)

if __name__ == '__main__':

    app = QApplication(sys.argv)
    w = Myform()
    sys.exit(app.exec_())

日期選擇器

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

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QCalendarWidget, QLabel
from PyQt5.QtCore import QDate


class Myform(QWidget):

    def __init__(self):

        super(Myform, self).__init__()

        self.initUI()

    def initUI(self):

        cal = QCalendarWidget(self)
        cal.setGridVisible(True)    # 讓日曆網格狀顯示
        cal.move(20, 20)
        cal.clicked[QDate].connect(self.showDate)  # 觸發事件並傳遞引數QDate(選中日期)

        self.lbl = QLabel(self)

        date = cal.selectedDate()   # 顯示預設選中的日期
        self.lbl.setText(date.toString())

        self.lbl.move(130, 260)

        self.setGeometry(300, 300, 600, 300)
        self.setWindowTitle("cadenlar")
        self.show()

    def showDate(self, date):

        self.lbl.setText(date.toString())


if __name__ == '__main__':

    app = QApplication(sys.argv)
    w = Myform()
    sys.exit(app.exec_())