Skip to content
119 changes: 119 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
# Pyqt5示例大全
## 基础入门
[Hello world!](src/basic/First.py)
[环境说明.txt](src/basic/搭建PyQt5开发环境.txt)
[窗口类型.txt](src/controls/主窗口类型.txt)
[.ui文件转.py文件](src/designer/将.ui文件转换为.py文件.txt)

## 布局与设计
> 可参考其他链接[Pyqt5之布局管理](https://www.cnblogs.com/laizhenghong2012/p/10040798.html)
[绝对布局](src/layout/AbsoluteLayout.py)
[栅格布局](src/layout/Calc.py)
[表单布局(QFormLayout)](src/layout/FormLayout.py)
[栅格布局:表单设计](src/layout/GridForm.py)
[水平盒布局(QHBoxLayout)](src/layout/HBoxLayout.py)
[垂直盒布局(QBoxLayout)](src/layout/VBoxLayout.py)
[设置控件的对齐方式](src/layout/HBoxLayoutAlign.py)
[让按钮永远在窗口右下角](src/layout/RightBottomButton.py)
[拖动控件之间的边界(QSplitter)](src/layout/Splitter.py)
[设置伸缩量(addStretch)](src/layout/Stretch.py)
[混合布局/嵌套布局](src/layout/MixLayout.py)
[混合布局/嵌套布局1](src/layout/MixLayout1.py)



## 基础组件与操作
### 组件
[复选框控件(QCheckBox)](src/controls/QCheckBoxDemo.py)
[下拉列表控件(QComboBox)](src/controls/QComboBoxDemo.py)
[标签控件(QLabel)](src/controls/QLabelDemo.py)
[标签与伙伴控件(QLabel)](src/controls/QLabelBuddy.py)
[文本输入框控件(QLineEdit)](src/controls/QLineEditDemo.py)
[文本输入框回显模式(QLineEdit)](src/controls/QLineEditEchoMode.py)
[文本输入框校验](src/controls/QLineEditMask.py)
[按钮组件(QPushButton等)](src/controls/QPushButtonDemo.py)
[单选按钮控件(QRadioButton)](src/controls/QRadioButtonDemo.py)
[滑块控件(QSlider)](src/controls/QSliderDemo.py):可以用来完成放大缩小操作
[计数器控件(QSpinBox)](src/controls/QSpinBoxDemo.py)
[编辑框组件(QTextEdit)](src/controls/QTextEditDemo.py)

### 操作
[窗口居中](src/controls/CenterForm.py)
[状态栏消息](src/controls/FirstMainWin.py)
[设置图标](src/controls/IconForm.py)
[退出窗口](src/controls/QuitApplication.py)
[屏幕坐标](src/controls/ScreenGeometry.py)
[设置组件提示消息](src/controls/Tooltip.py)

## 菜单栏/工具栏/状态栏
[创建和使用菜单栏](src/menu_toolbar_statusbar/Menu.py)
[创建和使用工具栏](src/menu_toolbar_statusbar/Toolbar.py)
[创建和使用状态栏](src/menu_toolbar_statusbar/StatusBar.py)

## 剪切板
[使用剪贴板](src/drapclip/ClipBoard.py)
[让控件支持拖拽动作]()

## 树/表格
### 树
[树控件(QTreeWidget)的基本用法](src/table_tree/BasicTreeWidget.py)
[显示列表数据(QListView控件)](src/table_tree/ListView.py)
[扩展的列表控件(QListWidget)](src/table_tree/ListWidget.py)
[添加、修改和删除树控件中的节点](src/table_tree/ModifyTree.py)
[为树节点添加响应事件](src/table_tree/TreeEvent.py)


### 表格
[扩展的表格控件(QTableWidget)](src/table_tree/TableWidget.py)
[设置单元格字体和颜色](src/table_tree/CellFontAndColor.py)
[设置单元格的文本对齐方式](src/table_tree/CellTextAlignment.py)
[设置单元格尺寸](src/table_tree/CellSize.py)
[合并单元格](src/table_tree/Span.py)
[在单元格中放置控件](src/table_tree/PlaceControlInCell.py)
[按列排序](src/table_tree/ColumnSort.py)
[改变单元格中图片的尺寸](src/table_tree/CellImageSize.py)
[在单元格中实现图文混排的效果](src/table_tree/CellImageText.py)
[在表格中快速定位到特定的行](src/table_tree/DataLocation.py)
[显示二维表数据(QTableView控件)](src/table_tree/TableView.py)


## 对话框
[对话框:QDialog](src/dialogs/QDialogDemo.py)
[颜色对话框:QColorDialog](src/dialogs/QColorDialog.py)
[字体对话框:QFontDialog](src/dialogs/QColorDialog.py)
[文件对话框:QFileDialog](src/dialogs/QFileDialogDemo.py)
[输入对话框:QInputDialog](src/dialogs/QInputDialogDemo.py)
[消息对话框:QMessageBox](src/dialogs/QMessageBox.py)

## 日历和时间
[不同风格日历和时间 QDateTimeEdit](src/calendar_time/DateTimeEdit.py)
[日历控件](src/calendar_time/MyCalendar.py)

## 容器组件
[停靠组件](src/containers/DockWidget.py)
[容纳多文档的窗口](src/containers/MultiWindows.py)
[堆栈窗口控件(QStackedWidget)](src/containers/QStackedWidget.py)
> 类似于一个菜单栏,选项卡控件更像是一个横着的堆栈窗口组件

[滚动条控件(QScrollBar)](src/containers/ScrollBar.py)
[选项卡控件:(QTabWidget)](src/containers/TabWidget.py)
## [信号与槽](src/SignalSlot/)
[入门示例](src/SignalSlot/SignalSlotDemo.py)
[信号与槽自动连接](src/SignalSlot/AutoSignalSlot.py)
[自定义信号](src/SignalSlot/CustomSignal.py)
[Lambda表达式](src/SignalSlot/LambdaSlotArg.py)
[为类添加多个信号](src/SignalSlot/MultiSignal.py)
[信号槽N对N连接与断开](src/SignalSlot/NNSignal.py)
[Override(覆盖)槽函数](src/SignalSlot/OverrideSlot.py)
[使用Partial对象为槽函数传递参数](src/SignalSlot/PartialSlotArg.py)
[窗口信号](src/SignalSlot/WinSignal.py)



## 多线程
[让程序自动关闭](src/multithread/AutoCloseWindow.py)
[计数器](src/multithread/Counter.py)
[动态显示时间](src/multithread/ShowTime.py)
[多线程更新UI数据](src/SignalSlot/ThreadUpdateUI.py)

## [实战项目](src/project/)
58 changes: 58 additions & 0 deletions src/layout/MixLayout.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
from PyQt5.QtWidgets import QGridLayout, QVBoxLayout, QApplication, QHBoxLayout, QWidget, QPushButton, QLineEdit
from PyQt5 import QtWidgets
import sys

class RadioButton(QtWidgets.QWidget):
def __init__(self):
QtWidgets.QWidget.__init__(self)
self.setUI()

def setUI(self):
# button
self.btn1 = QPushButton('button1')
self.btn2 = QPushButton('button2')
self.btn3 = QPushButton('button3')
self.btn4 = QPushButton('button4')

# 新建一个栅格布局,并且将按钮添加进去
self.grid = QGridLayout()
self.grid.addWidget(self.btn1, 0, 0)
self.grid.addWidget(self.btn2, 0, 1)
self.grid.addWidget(self.btn3, 1, 0)
self.grid.addWidget(self.btn4, 1, 1)

# 新建左边容器
self.widget1 = QWidget()
self.widget1.setStyleSheet("QWidget{border: 1px solid #FF0000;}") # 设置样式
self.widget1.setLayout(self.grid)

# 输入行
self.lineEdit1 = QLineEdit('lineEdit1')
self.lineEdit2 = QLineEdit('lineEdit2')
self.lineEdit3 = QLineEdit('lineEdit3')
self.lineEdit4 = QLineEdit('lineEdit4')

# 新建一个垂直布局,并且将输入行添加进去
self.vbox = QVBoxLayout()
self.vbox.addWidget(self.lineEdit1)
self.vbox.addWidget(self.lineEdit2)
self.vbox.addWidget(self.lineEdit3)
self.vbox.addWidget(self.lineEdit4)

# 新建右边容器
self.widget2 = QWidget()
self.widget2.setStyleSheet("QWidget{border: 1px solid #FF0000;}") # 设置样式
self.widget2.setLayout(self.vbox)

'''layout'''
self.hbox = QHBoxLayout()
self.hbox.addWidget(self.widget1)
self.hbox.addWidget(self.widget2)
self.setLayout(self.hbox)


if __name__ == "__main__":
app = QApplication(sys.argv)
qb = RadioButton()
qb.show()
sys.exit(app.exec_())
46 changes: 46 additions & 0 deletions src/layout/MixLayout1.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QHBoxLayout, QVBoxLayout, \
QGridLayout, QFormLayout, QPushButton

class Window(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('嵌套布局')
self.resize(700, 200)

# 全局控件(注意参数self),用于承载全局布局
wwg = QWidget(self)

# 全局布局
wl = QHBoxLayout(wwg)
hlayout = QHBoxLayout()
vlayout = QVBoxLayout()
glayout = QGridLayout()
flayout = QFormLayout()

# 为局部布局添加控件
hlayout.addWidget(QPushButton(str(1)))
hlayout.addWidget(QPushButton(str(2)))
vlayout.addWidget(QPushButton(str(3)))
vlayout.addWidget(QPushButton(str(4)))
glayout.addWidget(QPushButton(str(5)), 0, 0)
glayout.addWidget(QPushButton(str(6)), 0, 1)
glayout.addWidget(QPushButton(str(7)), 1, 0)
glayout.addWidget(QPushButton(str(8)), 1, 1)
flayout.addWidget(QPushButton(str(9)))
flayout.addWidget(QPushButton(str(10)))
flayout.addWidget(QPushButton(str(11)))
flayout.addWidget(QPushButton(str(12)))

# 在布局布局wl中添加局部布局
wl.addLayout(hlayout)
wl.addLayout(vlayout)
wl.addLayout(glayout)
wl.addLayout(flayout)

self.show()

if __name__ == '__main__':
app = QApplication(sys.argv)
w = Window()
sys.exit(app.exec_())