书山小站

记录我的程序人生

[Python]QT库使用

1

import datetime

from PyQt5.QtCore import QDateTime, QTimer, Qt
from PyQt5.QtWidgets import (QApplication, QGridLayout, QGraphicsGridLayout, QHBoxLayout, QVBoxLayout,
                             QGroupBox, QTabWidget,
                             QLabel, QCheckBox, QRadioButton, QComboBox,
                             QLineEdit, QTextEdit, QDialog, QPushButton, QSlider, QScrollBar, QSpinBox, QTableWidget,
                             QProgressBar, QDial, QWidget, QStyleFactory, QSizePolicy,QDateTimeEdit)


class WidgetGallery(QDialog):
    def __init__(self, parent=None):
        # 设置自定义样式
        super(WidgetGallery, self).__init__(parent)
        self.originalPalette = QApplication.palette()

        # 下拉列表
        style_combox = QComboBox()
        style_combox.addItems(QStyleFactory.keys())

        # 标签
        style_lable = QLabel("样式")
        style_lable.setBuddy(style_combox)
        # 复选框
        self.use_stander_checkbox = QCheckBox("使用标准")
        self.use_stander_checkbox.setChecked(True)

        #下拉列表选择不同的样式进行更改
        style_combox.activated[str].connect(self.changeStyle)
        diable_widget_chekbox = QCheckBox("禁用组件")
        self.use_stander_checkbox.toggled.connect(self.changePalettle)
        # 顶端布局
        top_layout = QHBoxLayout()
        top_layout.addWidget(style_lable)
        top_layout.addWidget(style_combox)
        top_layout.addWidget(self.use_stander_checkbox)
        top_layout.addWidget(diable_widget_chekbox)
        top_layout.addWidget(diable_widget_chekbox)


        self.createTopLeftGroupBox()
        self.createTopRightGroupBox()
        self.createBottomLeftTableWidget()
        self.createBottomRightGroupBox()
        self.createProgressbar()
        main_layout = QGridLayout()
        main_layout.addLayout(top_layout, 0, 0, 1, 2)  # 0行 0列 1 行 两列
        main_layout.addWidget(self.top_left_group, 1, 0) # 第二行 第二行 第1列
        main_layout.addWidget(self.top_right_group, 1, 1)
        main_layout.addWidget(self.bottom_left_tabwidget,2,0)
        main_layout.addWidget(self.bottom_right_group,2,1)
        main_layout.addWidget(self.progreebar,3,0,1,2)
        self.setLayout(main_layout)
        self.setWindowTitle("基本组件")

    # 第一组 左上角
    def createTopLeftGroupBox(self):
        self.top_left_group = QGroupBox("111")
        readiobutton1 = QRadioButton("单选1")
        readiobutton2 = QRadioButton("单选2")
        readiobutton3 = QRadioButton("单选3")

        checkbox = QCheckBox("Tri_state ChekBox")
        checkbox.setTristate(True)
        checkbox.setCheckState(Qt.PartiallyChecked)
        checkbox.setChecked(True)
        # 垂直布局
        layout = QVBoxLayout()
        layout.addWidget(readiobutton1)
        layout.addWidget(readiobutton2)
        layout.addWidget(readiobutton3)
        layout.addWidget(checkbox)
        self.top_left_group.setLayout(layout)

    def createTopRightGroupBox(self):
        self.top_right_group = QGroupBox("第二组")
        default_butt1 = QPushButton("默认")
        default_butt1.setDefault(True)

        toggle_butt1 = QPushButton("开关")
        toggle_butt1.setCheckable(True)
        toggle_butt1.setChecked(True)

        flat_butt1 = QPushButton("Flat")
        flat_butt1.setFlat(True)

        layout = QVBoxLayout()
        layout.addWidget(default_butt1)
        layout.addWidget(toggle_butt1)
        layout.addWidget(flat_butt1)
        self.top_right_group.setLayout(layout)

    # 左下角
    def createBottomLeftTableWidget(self):
        #选项卡
        self.bottom_left_tabwidget = QTabWidget()
        self.bottom_left_tabwidget.setSizePolicy(QSizePolicy.Preferred,QSizePolicy.Ignored) # 自动调整大小

        tab1 = QWidget()
        tablewidget = QTableWidget(10,10) # 表格10行 10列
        tab1hbox = QHBoxLayout() #水平布局
        tab1hbox.addWidget(tablewidget)
        tab1.setLayout(tab1hbox)

        tab2 = QWidget()
        textedit = QTextEdit()
        textedit.setPlainText("我爱C+\n更爱python") #多行
        tab2hbox = QHBoxLayout()
        tab2hbox.addWidget(textedit)
        tab2.setLayout(tab2hbox)

        self.bottom_left_tabwidget.addTab(tab1,"表格")
        self.bottom_left_tabwidget.addTab(tab2,"text")
    #右下角
    def createBottomRightGroupBox(self):
        self.bottom_right_group = QGroupBox("333")

        linedit = QLineEdit("111")
        linedit.setEchoMode(QLineEdit.Password)

        spinbox = QSpinBox(self.bottom_right_group) #容器
        spinbox.setValue(20)

        datetimeedit = QDateTimeEdit(self.bottom_right_group)
        datetimeedit.setDateTime(QDateTime.currentDateTime())

        slide = QSlider(Qt.Horizontal,self.bottom_right_group)
        slide.setValue(50)

        scrollbar = QScrollBar(Qt.Horizontal,self.bottom_right_group)
        scrollbar.setValue(60)

        dial = QDial(self.bottom_right_group)
        dial .setValue(70)
        dial.setNotchesVisible(True)

        layout = QGridLayout()
        layout.addWidget(linedit,0,0,1,2)
        layout.addWidget(spinbox,1,0,1,2)
        layout.addWidget(datetimeedit,2,0,1,2)
        layout.addWidget(slide,3,0)
        layout.addWidget(scrollbar,4,0)
        layout.addWidget(dial,3,1,2,1) # 第三行第一列开始合并两行占一列
        self.bottom_right_group.setLayout(layout)

    # 进度条
    def createProgressbar(self):
        self.progreebar = QProgressBar()
        self.progreebar.setRange(0,100)
        self.progreebar.setValue(32)
        timer = QTimer(self)
        timer.timeout.connect(self.advanceProgressBar) #QT事件处理机制
        timer.start(1000)
    def advanceProgressBar(self):
        cur_val = self.progreebar.value()
        max_val = self.progreebar.maximum()
        self.progreebar.setValue(cur_val+1)

    # 改变模板

    def changePalettle(self):
        if self.use_stander_checkbox.isChecked():
            QApplication.setPalette(QApplication.style().standardPalette()) #标准
        else:
            QApplication.setPalette(self.originalPalette) #自定义

    # 改变样式
    def changeStyle(self,style_name):

        QApplication.setStyle(QStyleFactory.create(style_name))
        self.changePalettle()


if __name__ == '__main__':
    import sys
    app = QApplication(sys.argv)
    gallery = WidgetGallery()
    gallery.show()
    sys.exit(app.exec_())

发表评论

电子邮件地址不会被公开。 必填项已用*标注