PyQt5基本组件使用

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

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

  • 先看一下效果图
    在这里插入图片描述

  • 代码如下:

# PyQt基本组件

"""

    Qt界面基本思路:
    1、容器 布局layout:QHBoxLayout,QVBoxLayout,QGridLayout
            分组容器:QGroupBox,QTabWidget
            
    2、组件:QLabel,QCheckBox,
            QComboBox,QLineEdit,QProgressBar,
            QPushButton,QRadioButton,QScrollBar,
            QSlider,QSpinBox,QTabWidget,QTableWidget,
            QTextEdit,QWidget,QDial,
            QDateTimeEdit
            
    3、事件处理、数据绑定
    
"""

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_())

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冷冰殇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值