up39P
zu{x2dd$3anSTV)fqBz)LFWCNs(2*Br^9bhJNa&sdv#5eSUWa+0hPbAHZPcBgbiuNG
zIxLr}LLyGc(Uy=@sR^(ha3l?os1`sXl{jQoNHX?F68cCuP@J2?xY)wDY&dxGF=4l3
zL2SDqhDZ1)3kb{#NGSRUSPR&U3ixr2;Vl#4Z71RF#1U8q2r32yUG8A=H(>h8h=GZS
zUiXN;VsN*41Z8^!l|BKnJ_40OB)tNHYDeVUN#s~a96KVxKf2w1fPM9~h~S&yQ?
I#s=N}Uk>$o0ssI2
literal 0
HcmV?d00001
diff --git a/动画/ScreenShot/1.gif b/动画/ScreenShot/窗口淡入淡出.gif
similarity index 100%
rename from 动画/ScreenShot/1.gif
rename to 动画/ScreenShot/窗口淡入淡出.gif
diff --git a/动画/按钮放大缩小动画.py b/动画/按钮放大缩小动画.py
index a43475d..c52f139 100644
--- a/动画/按钮放大缩小动画.py
+++ b/动画/按钮放大缩小动画.py
@@ -92,18 +92,18 @@ class TestWindow(QWidget):
super(TestWindow, self).showEvent(event)
# 更新按钮的位置
self.button1.updatePos()
-
+ # 针对不在控件中的按钮
self.button2.move(self.width() - self.button2.width() - 15,
- self.height() - self.button2.height() - 10)
+ self.height() - self.button2.height() - 10)
self.button2.updatePos()
def resizeEvent(self, event):
super(TestWindow, self).resizeEvent(event)
# 更新按钮的位置
self.button1.updatePos()
-
+ # 针对不在控件中的按钮
self.button2.move(self.width() - self.button2.width() - 15,
- self.height() - self.button2.height() - 10)
+ self.height() - self.button2.height() - 10)
self.button2.updatePos()
diff --git a/动画/淡入淡出.py b/动画/窗口淡入淡出.py
similarity index 96%
rename from 动画/淡入淡出.py
rename to 动画/窗口淡入淡出.py
index 4517edf..2669789 100644
--- a/动画/淡入淡出.py
+++ b/动画/窗口淡入淡出.py
@@ -34,6 +34,7 @@ class Window(QWidget):
def doShow(self):
try:
+ # 尝试先取消动画完成后关闭窗口的信号
self.animation.finished.disconnect(self.close)
except:
pass
diff --git a/多线程/README.md b/多线程/README.md
new file mode 100644
index 0000000..61d870d
--- /dev/null
+++ b/多线程/README.md
@@ -0,0 +1,19 @@
+# 多线程
+
+PyQt多线程的简单使用例子
+
+## [1、继承QThread](继承QThread.py)
+
+## [2、moveToThread](moveToThread.py)
+
+## [3、线程挂起恢复](线程挂起恢复.py)
+
+注意,这里只是简单演示,在应用这些代码时要小心
+
+1. 这里使用windows的api实现,主要用到`SuspendThread`和`ResumeThread`函数
+1. 利用`ctypes.windll.kernel32.OpenThread(win32con.PROCESS_ALL_ACCESS, False, int(QThread.currentThreadId()))`
+1. 得到线程的句柄,然后就可以通过上面的两个函数对其进行挂起与恢复
+
+`ctypes.windll.kernel32.TerminateThread`终止线程,不推荐
+
+![截图](ScreenShot/线程挂起恢复.gif)
\ No newline at end of file
diff --git a/多线程/线程挂起恢复/ScreenShot/1.gif b/多线程/ScreenShot/线程挂起恢复.gif
similarity index 100%
rename from 多线程/线程挂起恢复/ScreenShot/1.gif
rename to 多线程/ScreenShot/线程挂起恢复.gif
diff --git a/多线程/线程挂起恢复/moveToThread.py b/多线程/moveToThread.py
similarity index 100%
rename from 多线程/线程挂起恢复/moveToThread.py
rename to 多线程/moveToThread.py
diff --git a/多线程/线程挂起恢复/线程挂起恢复.py b/多线程/线程挂起恢复.py
similarity index 100%
rename from 多线程/线程挂起恢复/线程挂起恢复.py
rename to 多线程/线程挂起恢复.py
diff --git a/多线程/线程挂起恢复/README.md b/多线程/线程挂起恢复/README.md
deleted file mode 100644
index 0405c28..0000000
--- a/多线程/线程挂起恢复/README.md
+++ /dev/null
@@ -1,16 +0,0 @@
-# 简单的子线程例子
-
-使用继承QThread和moveToThread两种方式
-
-# 注意,这里只是简单演示,在应用这些代码时要小心
-## 线程的挂起与恢复
-这里使用windows的api实现,主要用到SuspendThread和ResumeThread函数
-
-利用ctypes.windll.kernel32.OpenThread(win32con.PROCESS_ALL_ACCESS, False, int(QThread.currentThreadId()))
-
-得到线程的句柄,然后就可以通过上面的两个函数对其进行挂起与恢复
-
-ctypes.windll.kernel32.TerminateThread终止线程,不推荐
-
-## 截图
-![截图](ScreenShot/1.gif)
\ No newline at end of file
diff --git a/多线程/线程挂起恢复/inheritQThread.py b/多线程/继承QThread.py
similarity index 100%
rename from 多线程/线程挂起恢复/inheritQThread.py
rename to 多线程/继承QThread.py
diff --git a/窗口/README.md b/窗口/README.md
index e62c8a4..3daf420 100644
--- a/窗口/README.md
+++ b/窗口/README.md
@@ -8,10 +8,10 @@
## [2、分割窗口的分割条重绘](分割窗口的分割条重写.py)
-1. 原理在于QSplitter在创建分割条的时候会调用createHandle函数
-1. 通过重新写createHandle返回自己的QSplitterHandle类
-1. 通过QSplitterHandle的paintEvent实现绘制其它形状,
-1. 重写mousePressEvent和mouseMoveEvent来实现鼠标的其它事件
+1. 原理在于`QSplitter`在创建分割条的时候会调用`createHandle`函数
+1. 通过重新写`createHandle`返回自己的`QSplitterHandle`类
+1. 通过`QSplitterHandle`的`paintEvent`实现绘制其它形状,
+1. 重写`mousePressEvent`和`mouseMoveEvent`来实现鼠标的其它事件
![截图](ScreenShot/分割窗口的分割条重写.gif)
@@ -24,17 +24,17 @@
1. 如果窗口的x坐标大于屏幕宽度-窗口宽度/2 则需要隐藏到右边
2. 事件说明
- 1. mousePressEvent,鼠标按下事件,主要记录按下的坐标
- 1. mouseMoveEvent,鼠标移动事件,用于移动窗口
- 1. mouseReleaseEvent,鼠标弹起事件,用于判断是否需要隐藏窗口
- 1. enterEvent,鼠标进入事件,用于窗口隐藏后,是否需要暂时显示预览
- 1. leaveEvent,鼠标离开事件,用于窗口暂时显示后自动隐藏效果
+ 1. `mousePressEvent`,鼠标按下事件,主要记录按下的坐标
+ 1. `mouseMoveEvent`,鼠标移动事件,用于移动窗口
+ 1. `mouseReleaseEvent`,鼠标弹起事件,用于判断是否需要隐藏窗口
+ 1. `enterEvent`,鼠标进入事件,用于窗口隐藏后,是否需要暂时显示预览
+ 1. `leaveEvent`,鼠标离开事件,用于窗口暂时显示后自动隐藏效果
## [4、嵌入外部窗口](嵌入外部窗口.py)
-1. 使用SetParent函数设置外部窗口的parent为Qt的窗口
-1. Qt使用QWidget.createWindowContainer(QWindow.fromWinId(窗口ID))生成QWidget
-1. 使用GetWindowLong得到原来窗口的样式属性(style = win32gui.GetWindowLong(hwnd, win32con.GWL_STYLE)和exstyle = win32gui.GetWindowLong(hwnd, win32con.GWL_EXSTYLE))
+1. 使用`SetParent`函数设置外部窗口的`parent`为Qt的窗口
+1. Qt使用`QWidget.createWindowContainer(QWindow.fromWinId(窗口ID))`生成QWidget
+1. 使用`GetWindowLong`得到原来窗口的样式属性`style = win32gui.GetWindowLong(hwnd, win32con.GWL_STYLE)`和`exstyle = win32gui.GetWindowLong(hwnd, win32con.GWL_EXSTYLE)`
1. 这里还原窗口后不会显示,用spy++发现没有了WS_VISIBLE样式(未解决)
![截图](ScreenShot/嵌入外部窗口.gif)
@@ -52,7 +52,7 @@
## [6、简单探测窗口和放大截图](简单探测窗口和放大截图.py)
-1. 利用win32gui模块获取鼠标所在位置的窗口大小(未去掉边框)和rgb颜色
+1. 利用`win32gui`模块获取鼠标所在位置的窗口大小(未去掉边框)和rgb颜色
1. 利用一个全屏的全透明鼠标穿透的窗口(目的在于绘制矩形框和截图)
![截图](ScreenShot/简单探测窗口和放大截图.gif)
@@ -60,8 +60,8 @@
## [7、消息对话框倒计时关闭](消息对话框倒计时关闭.py)
-1. 通过继承QMessageBox实现倒计时关闭的对话框
-1. QTimer定时器关闭窗口
+1. 通过继承`QMessageBox`实现倒计时关闭的对话框
+1. `QTimer`定时器关闭窗口
![截图](ScreenShot/消息对话框倒计时关闭.gif)
@@ -69,17 +69,17 @@
1. 方式一(QWidget)
- 1. 使用一个QWidget(FramelessWindow)作为父窗口, 一个TitleBar作为标题栏, 一个QWidget作为底部容器
- 1. 父窗口FramelessWindow设置为背景透明,但是需要绘制一定宽度的透明度很高的矩形边框用来接受鼠标事件(变形鼠标样式进行调整窗口大小)
- 1. TitleBar的最小化最大化关闭等按钮事件关联到父窗口里
- 1. TitleBar中的鼠标按下移动事件得到坐标也传递到父窗口调用move方法进行窗口移动
+ 1. 使用一个`QWidget`(`FramelessWindow`)作为父窗口, 一个`TitleBar`作为标题栏, 一个`QWidget`作为底部容器
+ 1. 父窗口`FramelessWindow`设置为背景透明,但是需要绘制一定宽度的透明度很高的矩形边框用来接受鼠标事件(变形鼠标样式进行调整窗口大小)
+ 1. `TitleBar`的最小化最大化关闭等按钮事件关联到父窗口里
+ 1. `TitleBar`中的鼠标按下移动事件得到坐标也传递到父窗口调用move方法进行窗口移动
![截图](ScreenShot/无边框自定义标题栏窗口/无边框自定义标题栏窗口.gif)
1. 方式二(windows api)
- 1. 使用win32gui设置薄边框
- 1. 重写nativeEvent事件拦截边框的系统边框的显示,并返回各个方向
+ 1. 使用`win32gui`设置薄边框
+ 1. 重写`nativeEvent`事件拦截边框的系统边框的显示,并返回各个方向
## 截图
![截图](ScreenShot/无边框自定义标题栏窗口/win无边框调整大小1.jpg)
diff --git a/菜单/README.md b/菜单/README.md
index f1bdcd6..06eb299 100644
--- a/菜单/README.md
+++ b/菜单/README.md
@@ -12,10 +12,10 @@
原理:
-1. 设置菜单项可勾选:通过QAction.setCheckable(True)方法实现
-1. 设置菜单不可关闭:通过覆盖QMenu的鼠标释放mouseReleaseEvent方法(可直接替换或者通过installEventFilter安装事件过滤器实现)
-1. 在菜单的鼠标释放事件中,当点击菜单项后是通过点击点坐标来查找是否有QAction,然后触发对应的QAction。
-1. 故在没有QAction的地方则直接交还给QMenu自行处理逻辑,在有QAction的地方可以根据自己的需求进行处理(如上所提)
+1. 设置菜单项可勾选:通过`QAction.setCheckable(True)`方法实现
+1. 设置菜单不可关闭:通过覆盖`QMenu`的鼠标释放`mouseReleaseEvent`方法(可直接替换或者通过`installEventFilter`安装事件过滤器实现)
+1. 在菜单的鼠标释放事件中,当点击菜单项后是通过点击点坐标来查找是否有`QAction`,然后触发对应的`QAction`
+1. 故在没有`QAction`的地方则直接交还给`QMenu`自行处理逻辑,在有`QAction`的地方可以根据自己的需求进行处理(如上所提)
核心代码:
diff --git a/表格/QTableView/README.md b/表格/QTableView/README.md
index ef18092..16cf747 100644
--- a/表格/QTableView/README.md
+++ b/表格/QTableView/README.md
@@ -3,7 +3,7 @@
## [1、表格内容复制](表格内容复制.py)
1. 通过构造一个和选中区域一样的空数组,然后对数组进行填充形成表格
-1. 最后循环数组用\t进行拼接join,换行用\r\n
+1. 最后循环数组用`\t`进行拼接`join`,换行用`\r\n`
1. 把字符串复制到剪切板中
![截图](ScreenShot/表格内容复制1.png)![截图](ScreenShot/表格内容复制2.png)
diff --git a/表格/QTableWidget/README.md b/表格/QTableWidget/README.md
index f801e81..cbded33 100644
--- a/表格/QTableWidget/README.md
+++ b/表格/QTableWidget/README.md
@@ -2,6 +2,6 @@
[1、Sqlalchemy动态拼接字段查询显示表格](数据库查询显示表格)
-通过判断界面中选择的条件对Sqlalchemy的model进行字段拼接从而实现按条件查询
+通过判断界面中选择的条件对`Sqlalchemy`的`model`进行字段拼接从而实现按条件查询
![截图](数据库查询显示表格/ScreenShot/数据库查询显示表格.png)
\ No newline at end of file