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