接上一篇: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_())