栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

PyQt5基本组件使用

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

PyQt5基本组件使用

接上一篇:PyQt5制作一个简单的登录界面

本文使用PyQt5中的基本组件实现一个界面。

  • 先看一下效果图

  • 代码如下:

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

class WidgetGallery(QDialog):

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

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

        # 标签
        style_label=QLabel('样式')
        style_label.setBuddy(style_combobox)

        self.use_stander_checkbox=QCheckBox('使用标准样式')
        self.use_stander_checkbox.setChecked(True)

        # 下拉列表选择不同的样式,进行更改
        style_combobox.activated[str].connect(self.changeStyle)
        self.use_stander_checkbox.toggled.connect(self.changePalette)
        disable_widget_checkbox=QCheckBox('禁用组件')
        self.createTopLeftGroupBox()
        self.createTopRightGroupBox()
        self.createBottomLeftTabWidget()
        self.createBottomRightGroupBox()
        self.createProgressbar()
        # 顶端布局,水平布局
        top_layout=QHBoxLayout()
        top_layout.addWidget(style_label)
        top_layout.addWidget(style_combobox)
        top_layout.addWidget(self.use_stander_checkbox)
        top_layout.addWidget(disable_widget_checkbox)

        # 主体布局
        main_layout=QGridLayout()
        main_layout.addLayout(top_layout,0,0,1,2)
        main_layout.addWidget(self.top_left_group,1,0)
        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.progressbar,3,0,1,2)
        self.setLayout(main_layout)
        self.setWindowTitle('基本组件')

    # 左上角:第一组基本组件
    def createTopLeftGroupBox(self):
        self.top_left_group=QGroupBox('第一组')
        radiobutton1=QRadioButton('单选1')
        radiobutton2=QRadioButton('单选2')
        radiobutton3=QRadioButton('单选3')

        checkbox=QCheckBox('Tri-state checkbox')
        checkbox.setTristate(True)
        checkbox.setCheckState(Qt.PartiallyChecked)
        # 垂直布局
        layout=QVBoxLayout()
        layout.addWidget(radiobutton1)
        layout.addWidget(radiobutton2)
        layout.addWidget(radiobutton3)
        layout.addWidget(checkbox)
        self.top_left_group.setLayout(layout)

    # 右上角:第二组
    def createTopRightGroupBox(self):
        self.top_right_group=QGroupBox('第二组')

        default_button=QPushButton('默认Button')
        default_button.setDefault(True)

        toggle_button=QPushButton('开关Button')
        toggle_button.setCheckable(True)
        toggle_button.setChecked(True)

        flat_button=QPushButton('FlatButton')
        flat_button.setFlat(True)

        # 垂直布局
        layout = QVBoxLayout()
        layout.addWidget(default_button)
        layout.addWidget(toggle_button)
        layout.addWidget(flat_button)
        self.top_right_group.setLayout(layout)

    # 左下角,构建选项卡
    def createBottomLeftTabWidget(self):
        # 选项卡
        self.bottom_left_tabwidget=QTabWidget()
        self.bottom_left_tabwidget.setSizePolicy(QSizePolicy.Preferred,
                                                 QSizePolicy.Ignored)# 设置选项卡默认大小
        # 标签
        tab1=QWidget()
        tablewidget=QTableWidget(10,10)
        tab1hbox=QHBoxLayout()#水平布局
        tab1hbox.addWidget(tablewidget)
        tab1.setLayout(tab1hbox)# 将标签设置为tab1hbox的布局

        tab2=QWidget()
        textedit=QTextEdit()
        textedit.setPlainText('你是n''傻逼')
        tab2hbox=QHBoxLayout()
        tab2hbox.addWidget(textedit)
        tab2.setLayout(tab2hbox)

        self.bottom_left_tabwidget.addTab(tab1,'表格')
        self.bottom_left_tabwidget.addTab(tab2,'文本')
    # 右下角,第三组
    def createBottomRightGroupBox(self):
        self.bottom_right_group=QGroupBox('第三组')

        lineedit=QLineEdit('strs3')
        lineedit.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(40)

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

        layout=QGridLayout()
        layout.addWidget(lineedit,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.progressbar=QProgressBar()
        self.progressbar.setRange(0,1000)
        self.progressbar.setValue(0)

        timer=QTimer(self)
        # qt事件处理机制
        timer.timeout.connect(self.advanceProgressBar)
        timer.start(1000)
    def advanceProgressBar(self):
        cur_val=self.progressbar.value()
        max_val=self.progressbar.maximum()

        self.progressbar.setValue(cur_val+(max_val-cur_val)/100)
        # self.progressbar.setValue(max_val-cur_val)

    # 改变模板
    def changePalette(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.changePalette()


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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/960852.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号