Skip to content

Commit

Permalink
update
Browse files Browse the repository at this point in the history
  • Loading branch information
892768447 committed Dec 26, 2018
1 parent b910d43 commit 151ba3f
Show file tree
Hide file tree
Showing 51 changed files with 184 additions and 7,366 deletions.
3 changes: 0 additions & 3 deletions Donate/README.md

This file was deleted.

2 changes: 1 addition & 1 deletion 菜单/菜单多选不关闭.py → QMenu/MultiSelect.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
@author: Irony
@site: https://github.com/892768447
@email: [email protected]
@file: 菜单多选不关闭
@file: MultiSelect
@description:
"""
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QLabel, QPushButton, QMenu,\
Expand Down
15 changes: 7 additions & 8 deletions 菜单/README.md → QMenu/README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# 菜单 QMenu
# QMenu

## [1、菜单设置多选并且不关闭](菜单多选不关闭.py)
## 1、菜单设置多选并且不关闭
[运行 MultiSelect.py](MultiSelect.py)

有时候会遇到这种需求:在界面某个位置弹出一个菜单,其中里面的菜单项可以多选(类似配置选项),
此时用QMenu会遇到点击一个菜单项就会自动关闭,当然可以通过其他方式实现该功能,
Expand All @@ -13,9 +14,9 @@
原理:

1. 设置菜单项可勾选:通过`QAction.setCheckable(True)`方法实现
1. 设置菜单不可关闭:通过覆盖`QMenu`的鼠标释放`mouseReleaseEvent`方法(可直接替换或者通过`installEventFilter`安装事件过滤器实现)
1. 在菜单的鼠标释放事件中,当点击菜单项后是通过点击点坐标来查找是否有`QAction`,然后触发对应的`QAction`
1. 故在没有`QAction`的地方则直接交还给`QMenu`自行处理逻辑,在有`QAction`的地方可以根据自己的需求进行处理(如上所提)
2. 设置菜单不可关闭:通过覆盖`QMenu`的鼠标释放`mouseReleaseEvent`方法(可直接替换或者通过`installEventFilter`安装事件过滤器实现)
3. 在菜单的鼠标释放事件中,当点击菜单项后是通过点击点坐标来查找是否有`QAction`,然后触发对应的`QAction`
4. 故在没有`QAction`的地方则直接交还给`QMenu`自行处理逻辑,在有`QAction`的地方可以根据自己的需求进行处理(如上所提)

核心代码:

Expand All @@ -31,6 +32,4 @@ def _menu_mouseReleaseEvent(self, event):
action.activate(action.Trigger)
```

效果图:

![截图](ScreenShot/菜单多选不关闭.gif)
![MultiSelect](ScreenShot/MultiSelect.gif)
File renamed without changes
21 changes: 11 additions & 10 deletions 滑动条/滑动条点击定位.py → QSlider/ClickJumpSlider.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
@author: Irony
@site: https://pyqt5.com https://github.com/892768447
@email: [email protected]
@file: Widgets.JumpSlider
@file: ClickJumpSlider
@description:
"""
from PyQt5.QtCore import Qt
Expand All @@ -21,7 +21,7 @@
__Version__ = "Version 1.0"


class JumpSlider(QSlider):
class ClickJumpSlider(QSlider):

def mousePressEvent(self, event):
# 获取上面的拉动块位置
Expand All @@ -31,7 +31,7 @@ def mousePressEvent(self, event):
QStyle.CC_Slider, option, QStyle.SC_SliderHandle, self)
if rect.contains(event.pos()):
# 如果鼠标点击的位置在滑块上则交给Qt自行处理
super(JumpSlider, self).mousePressEvent(event)
super(ClickJumpSlider, self).mousePressEvent(event)
return
if self.orientation() == Qt.Horizontal:
# 横向,要考虑invertedAppearance是否反向显示的问题
Expand All @@ -47,29 +47,30 @@ def mousePressEvent(self, event):
) else event.y(), self.height()))


class TestWindow(QWidget):
class DemoWindow(QWidget):

def __init__(self, *args, **kwargs):
super(TestWindow, self).__init__(*args, **kwargs)
super(DemoWindow, self).__init__(*args, **kwargs)
self.resize(600, 600)
layout = QFormLayout(self)

self.label1 = QLabel('0', self)
layout.addRow(self.label1, JumpSlider(
layout.addRow(self.label1, ClickJumpSlider(
Qt.Horizontal, valueChanged=lambda v: self.label1.setText(str(v))))

# 横向-反向显示
self.label2 = QLabel('0', self)
layout.addRow(self.label2, JumpSlider(
layout.addRow(self.label2, ClickJumpSlider(
Qt.Horizontal, invertedAppearance=True,
valueChanged=lambda v: self.label2.setText(str(v))))

self.label3 = QLabel('0', self)
layout.addRow(self.label3, JumpSlider(
layout.addRow(self.label3, ClickJumpSlider(
Qt.Vertical, minimumHeight=200, valueChanged=lambda v: self.label3.setText(str(v))))

# 纵向反向显示
self.label4 = QLabel('0', self)
layout.addRow(self.label4, JumpSlider(
layout.addRow(self.label4, ClickJumpSlider(
Qt.Vertical, invertedAppearance=True,
minimumHeight=200, valueChanged=lambda v: self.label4.setText(str(v))))

Expand All @@ -80,6 +81,6 @@ def __init__(self, *args, **kwargs):
sys.excepthook = cgitb.enable(1, None, 5, '')
from PyQt5.QtWidgets import QApplication
app = QApplication(sys.argv)
w = TestWindow()
w = DemoWindow()
w.show()
sys.exit(app.exec_())
36 changes: 36 additions & 0 deletions QSlider/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# QSlider

## 1、滑动条点击定位
[运行 ClickJumpSlider.py](ClickJumpSlider.py)

1. `QSlider`对鼠标点击然后跳转到该位置的支持不是很好,通过重写鼠标点击事件`mousePressEvent`来达到效果
2. 通过`style``subControlRect`方法计算得到滑块的区域,当鼠标点击区域在此次时则交给系统自己处理(比如按住不放拖动)
3. 通过`orientation`判断滑动条的方向(横竖)
4. 通过`invertedAppearance`判断滑动条是否反向(左右、上下)

```python
def mousePressEvent(self, event):
# 获取上面的拉动块位置
option = QStyleOptionSlider()
self.initStyleOption(option)
rect = self.style().subControlRect(
QStyle.CC_Slider, option, QStyle.SC_SliderHandle, self)
if rect.contains(event.pos()):
# 如果鼠标点击的位置在滑块上则交给Qt自行处理
super(JumpSlider, self).mousePressEvent(event)
return
if self.orientation() == Qt.Horizontal:
# 横向,要考虑invertedAppearance是否反向显示的问题
self.setValue(self.style().sliderValueFromPosition(
self.minimum(), self.maximum(),
event.x() if not self.invertedAppearance() else (self.width(
) - event.x()), self.width()))
else:
# 纵向
self.setValue(self.style().sliderValueFromPosition(
self.minimum(), self.maximum(),
(self.height() - event.y()) if not self.invertedAppearance(
) else event.y(), self.height()))
```

![ClickJumpSlider](ScreenShot/ClickJumpSlider.gif)
File renamed without changes
File renamed without changes.
30 changes: 0 additions & 30 deletions QTableView/CopyContent/__main__.py

This file was deleted.

5 changes: 3 additions & 2 deletions QTableView/README.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
# QTableView

## [1、表格内容复制](CopyContent)
## 1、表格内容复制
[运行 CopyContent.py](CopyContent.py)

1. 通过构造一个和选中区域一样的空数组,然后对数组进行填充形成表格
1. 最后循环数组用`\t`进行拼接`join`,换行用`\r\n`
1. 把字符串复制到剪切板中

![截图](ScreenShot/CopyContent1.png)![截图](ScreenShot/CopyContent2.png)
![CopyContent1](ScreenShot/CopyContent1.png) ![CopyContent2](ScreenShot/CopyContent2.png)

File renamed without changes.
File renamed without changes.
5 changes: 3 additions & 2 deletions QTableWidget/README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
# QTableWidget

## [1、Sqlalchemy动态拼接字段查询显示表格](SqlQuery)
## 1、Sqlalchemy动态拼接字段查询显示表格
[运行 SqlQuery.py](SqlQuery.py)

通过判断界面中选择的条件对`Sqlalchemy``model`进行字段拼接从而实现按条件查询

![截图](ScreenShot/SqlQuery.png)
![SqlQuery](ScreenShot/SqlQuery.png)
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
from sqlalchemy.sql.expression import and_
from sqlalchemy.sql.schema import Column
from sqlalchemy.sql.sqltypes import Integer, Text
from mainui import Ui_Form
from Lib.mainui import Ui_Form

__Author__ = """By: Irony
QQ: 892768447
Expand All @@ -26,7 +26,7 @@
__Version__ = "Version 1.0"

# engine = create_engine('mysql+mysqldb://root@localhost:3306/tourist?charset=utf8')
engine = create_engine('sqlite:///data.sqlite3', echo=True) # echo 表示开启命令显示
engine = create_engine('sqlite:///Data/data.sqlite3', echo=True) # echo 表示开启命令显示
Base = declarative_base()


Expand Down
29 changes: 0 additions & 29 deletions QTableWidget/SqlQuery/__main__.py

This file was deleted.

111 changes: 0 additions & 111 deletions QTableWidget/SqlQuery/mainui.py

This file was deleted.

Loading

0 comments on commit 151ba3f

Please sign in to comment.