PyQt5學習筆記二----組件---按鈕類控件

QAbstractButton:該類爲抽象類,不能實例化,必須由其他的類繼承它,來實現不同的功能

常見的按鈕類有:QPushButton、QToolButton、QRadiaButton、QCheckBox

按鈕類常用的方法如下所示:

isDown()

按鈕是否被按下

isChecked()

按鈕是否已經標記

isEnable()

按鈕是否可以被點擊

isCheckAble()

按鈕是否可標記

setAutoRepeat()

用戶在長按時是否可以自動重複執行

常用信號與槽標記

Pressed

鼠標在按鈕上按下左鍵時觸發

Released

鼠標在按鈕上釋放時觸發

Clicked

左鍵被按下然後釋放時,

Toggled

按鈕的標記狀態發生改變時觸發

QPushButton按鈕:是一個普通的按鈕類,繼承QAbstractButton類它的常用方法如下表

setCheckable()

按鈕是否被選,設置爲True,則保持爲已點擊和釋放狀態

toggle()

按鈕狀態之間進行切換

setIcon()

設置按鈕圖標

setEnable()

設置按鈕是否可用

isChecked()

返回按鈕狀態

setDefault()

設置按鈕默認狀態

setText()

設置按鈕顯示文本

text()

返回按鈕文本

案例一:爲按鈕設置快捷鍵,假如想爲按鈕設置快捷鍵Alt+D 則爲按鈕設置文本“&Down” 這樣 “&D”就是快捷鍵Alt+D。

# -*- coding: utf-8 -*-

import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

class Form(QDialog):
    def __init__(self,parent=None):
        super(Form,self).__init__(parent)
        self.resize(300,400)
        self.layout=QVBoxLayout()
        self.initUI()

    def initUI(self):
        self.btn1=QPushButton("Button1")
        self.btn1.setCheckable(True)
        self.btn1.toggle()

        self.btn1.clicked.connect(lambda:self.whichbtn(self.btn1))
        self.btn1.clicked.connect(self.btnstate)

        self.layout.addWidget(self.btn1)

        self.btn2=QPushButton("image")
        self.btn2.setIcon(QIcon("../images/python.jpg"))
        self.btn2.clicked.connect(lambda:self.whichbtn(self.btn2))

        self.layout.addWidget(self.btn2)
        self.setLayout(self.layout)

        self.btn3=QPushButton("Disbaled")
        self.btn3.setEnabled(False)
        self.layout.addWidget(self.btn3)

        self.btn4=QPushButton("&Download") #設置快捷鍵Alt+D &D
        self.btn4.setDefault(True)
        self.btn4.clicked.connect(lambda:self.whichbtn(self.btn4))
        self.layout.addWidget(self.btn4)
        self.setWindowTitle("Button Demo")

    def btnstate(self):
        if self.btn1.isCheckable():
            print("button pressed")
        else:
            print("button released")

    def whichbtn(self,btn):
        print("clicked button is "+btn.text())

if __name__=="__main__":
    app=QApplication(sys.argv)
    demo=Form()
    demo.show()
    sys.exit(app.exec_())

QRadioButton:提供了可供選擇的按鈕和文本標籤,即單選按鈕,一次只能選擇一個,類似於 on off ,當該按鈕被選爲on 或者off時,發送toggled信號。

#按鈕類QRadioButton按鈕實例
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

class RadioDemo(QWidget):
    def __init__(self,parent=None):
        super(RadioDemo,self).__init__(parent)
        self.resize(300,400)
        self.layout=QHBoxLayout()
        self.initUI()

    def initUI(self):
        self.btn1=QRadioButton("Button1")
        self.btn1.setChecked(True) #默認設置爲被選中
        self.btn1.toggled.connect(lambda :self.btnstate(self.btn1))
        self.layout.addWidget(self.btn1)

        self.btn2=QRadioButton("Button2")
        self.btn2.toggled.connect(lambda :self.btnstate(self.btn2))
        self.layout.addWidget(self.btn2)
        self.setLayout(self.layout)
        self.setWindowTitle("RadioButton Demo")

    def btnstate(self,btn):
        if btn.text() == "Button1":
            if btn.isChecked() == True:
                print(btn.text()+" is selected ")
            else:
                print(btn.text()+"is deselected")
if __name__=="__main__":
    app=QApplication(sys.argv)
    demo=RadioDemo()
    demo.show()
    sys.exit(app.exec_())

QCheckBox:該類是一組複選框按鈕,即可以選擇多個選項。該類按鈕有三種狀態:1.選中、2.半選中、3.未選中。選中的概念爲一般時按鈕上打勾,未選中則是按鈕是個空白框,半選中爲按鈕整個按鈕狂時被黑色填滿

常用方法

setChecked()

設置複選框狀態,True爲選中

setText()

設置複選框文本

text()

返回複選框的文本

isChecked()

返回複選框是否被選中

setTriState()

設置複選框爲三態複選框

三態狀態分爲:

Qt.Checked

值爲2

組件沒有被選中

Qt.PaetiallyChecked

1

組件被半選中

Qt.Unchecked

0

組件被選中

#按鈕類QRadioButton按鈕實例
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt

class CheckBoxDemo(QWidget):
    def __init__(self,parent=None):
        super(CheckBoxDemo,self).__init__(parent)
        self.setWindowTitle("CheckBox Demo")
        #self.resize(300,300)

        self.groupBox=QGroupBox("checkboxes")
        self.groupBox.setFlat(True)
        self.layout=QHBoxLayout()

        self.initUI()
        self.AddWidget()

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

        self.setLayout(self.mainLayout)


    def initUI(self):
        self.checkBox1=QCheckBox("&CheckBox1")
        self.checkBox1.setChecked(True)
        self.checkBox1.stateChanged.connect(lambda :self.btnstate(self.checkBox1))

        self.checkBox2=QCheckBox("CheckBox2")
        self.checkBox2.toggled.connect(lambda :self.btnstate(self.checkBox2))

        self.checkBox3=QCheckBox("CheckBox3")
        self.checkBox3.setTristate(True) #設置三態模式
        self.checkBox3.setCheckState(Qt.PartiallyChecked)
        self.checkBox3.stateChanged.connect(lambda :self.btnstate(self.checkBox3))
    def AddWidget(self):
        self.layout.addWidget(self.checkBox1)
        self.layout.addWidget(self.checkBox2)
        self.layout.addWidget(self.checkBox3)

    def btnstate(self,btn):
        chk1Status=self.checkBox1.text()+", isChecked="+str(self.checkBox1.isChecked() )+", checkstate="+ \
            str(self.checkBox1.checkState())+"\n"
        chk2Status=self.checkBox2.text()+", isChecked="+str(self.checkBox2.isChecked() )+", checkstate="+ \
            str(self.checkBox2.checkState())+"\n"
        chk3Status=self.checkBox3.text()+", isChecked="+str(self.checkBox3.isChecked() )+", checkstate="+ \
            str(self.checkBox3.checkState())+"\n"
        print(chk1Status+str("---")+chk2Status+"---"+chk3Status)

if __name__=="__main__":
    app=QApplication(sys.argv)
    demo=CheckBoxDemo()
    demo.show()
    sys.exit(app.exec_())

QComboBox :下拉列表框,該類控件是一個集按鈕和下拉選項於一體的控件,被稱爲下拉列表框

常用方法

addItem()

添加一個下拉選項

addItems()

從列表中添加下拉選項

Clear()

刪除下拉列表中所有選項

count()

返回下拉選項集合中的數目

currentText()

返回選中選項的文本

itemText(i)

獲取索引爲 i 的 item 的選項文本

currentIndex()

返回選中項的索引

setItemText(int index,text)

改變序號爲index項的文本

常用信號

Activated

當用戶選中一個下拉選項時發射該信號

currentIndexChanged

當下拉選項的索引發生改變時發射該信號

highlighted

當選中一個已經選中的下拉選項時,發射該信號

#按鈕類QCheckBox按鈕實例
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

class ComboxDemo(QWidget):
    def __init__(self,parent=None):
        super(ComboxDemo, self).__init__(parent)
        self.setWindowTitle("Combox 例子")
        self.resize(300,90)

        self.layout=QVBoxLayout()
        self.lbl=QLabel("")
        self.cb=QComboBox()
        self.cb.addItem("C")
        self.cb.addItem("C++")
        self.cb.addItems(["java","C#","Python"])
        self.cb.currentIndexChanged.connect(self.selectionchange)
        self.layout.addWidget(self.cb)
        self.layout.addWidget(self.lbl)
        self.setLayout(self.layout)

    def selectionchange(self,i):
        self.lbl.setText(self.cb.currentText())
        print("Item in the list are:")
        for count in range(self.cb.count()):
            print('item '+str(count)+" "+self.cb.itemText(count))
            print("Current index ",i," selection changed ",self.cb.currentText())

if __name__=="__main__":
    app=QApplication(sys.argv)
    demo=ComboxDemo()
    demo.show()
    sys.exit(app.exec_())

QSpinBox:該類是一個計數器控件,允許用戶選擇一個整數值,通過向上、向下按鈕或按鍵上的上下增加減少當前顯示的值,也可以輸入值。默認情況下取值範圍爲0~99,每次改變的步長值1

常用方法:

setMinimum()

設置計數器下邊界

setMaximum()

設置計數器上邊界

setRange()

設置計數器最大值、最小值、步長值

setValue()

設置計數器當前值

Value()

返回計數器當前值

singleStep()

設置計數器步長值

#按鈕類QSpinBox按鈕實例
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

class SpinBoxDemo(QWidget):
    def __init__(self,parent=None):
        super(SpinBoxDemo, self).__init__(parent)
        self.setWindowTitle("QSpinBox")
        self.resize(300,100)

        layout=QVBoxLayout()
        self.ll=QLabel("")
        self.ll.setAlignment(Qt.AlignCenter)
        layout.addWidget(self.ll)
        self.sp=QSpinBox()
        layout.addWidget(self.sp)
        self.sp.valueChanged.connect(self.valuechange)
        self.setLayout(layout)
    def valuechange(self):
        self.ll.setText("current value: "+str(self.sp.value()))

if __name__=="__main__":
    app=QApplication(sys.argv)
    demo=SpinBoxDemo()
    demo.show()
    sys.exit(app.exec_())

QSlider滑動條:該控件提供了一個垂直或水平的滑動條。是一個控制有界值的控件。允許用戶垂直或者水平在某一範圍拖動。

常用方法

setMinimum()

設置最小值

setMaxmum()

設置最大值

setSingleStep()

設置遞增步長值

setValue()

設置滑動控件的值

value()

獲得滑動控件值

setTickInterval()

設置刻度間隔

setTickPosition()

設置刻度標記位置

常用信號

valueChanged

當滑塊值發生變化時

sliderPressed

當用戶按下滑塊時

sliderMoved

當用戶拖動滑塊時

sliderReleased

當用戶釋放滑塊時

#按鈕類QSplider按鈕實例
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

class SliderDemo(QWidget):
    def __init__(self,parent=None):
        super(SliderDemo,self).__init__(parent)
        self.setWindowTitle("滑動條")
        self.resize(300,100)
        layout=QVBoxLayout()
        self.ll=QLabel("Hello PyQT5")
        self.ll.setAlignment(Qt.AlignCenter)
        layout.addWidget(self.ll)

        #水平方向
        self.sl=QSlider(Qt.Horizontal)
        #設置最小值
        self.sl.setMinimum(10)
        #設置最大值
        self.sl.setMaximum(50)
        #步長
        self.sl.setSingleStep(3)
        #設置當前值
        self.sl.setValue(20)
        #刻度位置,刻度在下方
        self.sl.setTickPosition(QSlider.TicksBelow)
        #設置刻度間隔
        self.sl.setTickInterval(5)
        layout.addWidget(self.sl)
        #信號與槽
        self.sl.valueChanged.connect(self.valuechange)
        self.setLayout(layout)
    def valuechange(self):
        print("current slider value=%s "%self.sl.value())
        size=self.value()
        self.ll.setFont(QFont("Arial",size))

if __name__=="__main__":
    app=QApplication(sys.argv)
    demo=SliderDemo()
    demo.show()
    sys.exit(app.exec_())

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章