Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 6daff6b

Browse files
Merge pull request #1 from 892768447/master
New pull request
2 parents 780e19a + 5ad94f2 commit 6daff6b

File tree

29 files changed

+2781
-5
lines changed

29 files changed

+2781
-5
lines changed

‎.gitignore‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,6 @@
1010
/.setting/*
1111
tmp
1212
.project
13-
.pydevproject
13+
.pydevproject
14+
.README.md.html
15+
README.md.html

‎.settings/org.eclipse.core.resources.prefs‎

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
eclipse.preferences.version=1
22
encoding//ActiveX\u7A97\u53E3/AxWidget.py=utf-8
3+
encoding//Json\u751F\u6210QTreeWidget/Json\u751F\u6210\u6811\u5F62\u7ED3\u6784.py=utf-8
34
encoding//PyQtChart\u7EC3\u4E60/ChartView/ChartView.py=utf-8
45
encoding//PyQtChart\u7EC3\u4E60/ChartView/ChatWidget.py=utf-8
56
encoding//PyQtChart\u7EC3\u4E60/charts/bar/BarStack.py=utf-8
@@ -8,17 +9,28 @@ encoding//PyQtChart\u7EC3\u4E60/test/LineChart.py=utf-8
89
encoding//PyQtChart\u7EC3\u4E60/test/LineChart\u81EA\u5B9A\u4E49xy\u8F74.py=utf-8
910
encoding//PyQtChart\u7EC3\u4E60/test/ToolTip.py=utf-8
1011
encoding//PyQtChart\u7EC3\u4E60/test/ToolTip2.py=utf-8
12+
encoding//QGraphicsView\u7EC3\u4E60/ImageView.py=utf-8
1113
encoding//QGraphicsView\u7EC3\u4E60/\u4E16\u754C\u5730\u56FE/WorldMap.py=utf-8
1214
encoding//QGraphicsView\u7EC3\u4E60/\u6DFB\u52A0QWidget.py=utf-8
15+
encoding//QGraphicsView\u7EC3\u4E60/\u7B80\u5355\u56FE\u50CF\u5904\u7406/SimpleImagePs.py=utf-8
16+
encoding//QGraphicsView\u7EC3\u4E60/\u7B80\u5355\u56FE\u50CF\u5904\u7406/SimpleImageThread.py=utf-8
17+
encoding//QGraphicsView\u7EC3\u4E60/\u7B80\u5355\u56FE\u50CF\u5904\u7406/SimpleImageView.py=utf-8
18+
encoding//tmp/LocalClient.py=utf-8
1319
encoding//tmp/Material/Effect/LineEffect.py=utf-8
1420
encoding//tmp/Material/Utils/Colors.py=utf-8
1521
encoding//tmp/Material/Utils/MaterialProperty.py=utf-8
1622
encoding//tmp/Material/Widget/LineEdit.py=utf-8
1723
encoding//tmp/Material/test/TestLineEdit.py=utf-8
24+
encoding//tmp/QtServer.py=utf-8
25+
encoding//tmp/error.py=utf-8
26+
encoding//tmp/json\u751F\u6210\u6811\u5F62\u7ED3\u6784.py=utf-8
1827
encoding//tmp/\u622A\u56FE\u753B\u77E9\u5F62/DrawRectangle.py=utf-8
1928
encoding//tmp/\u7B80\u5355\u63D2\u4EF6/Widget.py=utf-8
29+
encoding//tmp/\u8BFB\u53D6\u526A\u5207\u677F\u56FE\u7247.py=utf-8
2030
encoding//\u4E0B\u62C9\u9009\u62E9\u8054\u52A8/ComboBox.py=utf-8
2131
encoding//\u4EBA\u8138\u63CF\u70B9\u68C0\u6D4B/OpencvWidget.py=utf-8
32+
encoding//\u4EFFQQ\u8BBE\u7F6E\u9762\u677F/SettingUi.py=utf-8
33+
encoding//\u4EFFQQ\u8BBE\u7F6E\u9762\u677F/Window.py=utf-8
2234
encoding//\u5168\u5C40\u70ED\u952E/HotKey.py=utf-8
2335
encoding//\u5206\u5272\u7A97\u53E3\u7684\u5206\u5272\u6761\u91CD\u5199/Splitter.py=utf-8
2436
encoding//\u53F3\u4E0B\u89D2\u5F39\u51FA\u6846/WindowNotify.py=utf-8
@@ -50,11 +62,14 @@ encoding//\u754C\u9762\u7F8E\u5316/QPushButton\u8FDB\u5EA6\u52A8\u753B/PushButto
5062
encoding//\u754C\u9762\u7F8E\u5316/QSS\u7F8E\u5316\u4F8B\u5B50/QProgressBar\u8FDB\u5EA6\u6761\u6837\u5F0F/ProgressBar.py=utf-8
5163
encoding//\u754C\u9762\u7F8E\u5316/QSS\u7F8E\u5316\u4F8B\u5B50/QPushButton\u6309\u94AE/ButtonHover.py=utf-8
5264
encoding//\u754C\u9762\u7F8E\u5316/QScrollBar\u6EDA\u52A8\u6761\u6837\u5F0F/ScrollBar.py=utf-8
65+
encoding//\u754C\u9762\u7F8E\u5316/\u6C34\u6CE2\u7EB9\u8FDB\u5EA6\u6761/ProgressBar.py=utf-8
66+
encoding//\u754C\u9762\u7F8E\u5316/\u6C34\u6CE2\u7EB9\u8FDB\u5EA6\u6761/TestWidget.py=utf-8
5367
encoding//\u7A0B\u5E8F\u91CD\u542F/AutoRestart.py=utf-8
5468
encoding//\u7A97\u53E3\u91CD\u542F/RestartMainWindow.py=utf-8
5569
encoding//\u7B80\u5355\u7684\u7A97\u53E3\u8D34\u8FB9\u9690\u85CF/WeltHideWindow.py=utf-8
5670
encoding//\u817E\u8BAF\u89C6\u9891\u70ED\u64AD\u5217\u8868/TencentMovieHotPlay.py=utf-8
5771
encoding//\u817E\u8BAF\u89C6\u9891\u70ED\u64AD\u5217\u8868/TencentMovieHotPlay_Flow.py=utf-8
72+
encoding//\u817E\u8BAF\u89C6\u9891\u70ED\u64AD\u5217\u8868/TencentMovieHotPlay_ListWidget.py=utf-8
5873
encoding//\u81EA\u52A8\u66F4\u65B0/mylibs/testlibs.py=utf-8
5974
encoding//\u81EA\u52A8\u66F4\u65B0/test.py=utf-8
6075
encoding//\u81EA\u5B9A\u4E49QWidget\u7684QSS\u6837\u5F0F/CustomPaintWidget.py=utf-8
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
eclipse.preferences.version=1
2+
org.eclipse.ltk.core.refactoring.enable.project.refactoring.history=false
Lines changed: 152 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,152 @@
1+
#!/usr/bin/env python
2+
# -*- coding: utf-8 -*-
3+
4+
"""
5+
Created on 2018年4月8日
6+
@author: Irony
7+
@site: https://github.com/892768447
8+
@email: 892768447@qq.com
9+
@file:
10+
@description:
11+
"""
12+
import json
13+
import webbrowser
14+
15+
from PyQt5.QtCore import Qt
16+
from PyQt5.QtGui import QIcon
17+
from PyQt5.QtWidgets import QTreeWidget, QTreeWidgetItem, QWidget,\
18+
QLabel, QSpacerItem, QSizePolicy, QHBoxLayout
19+
import chardet
20+
21+
22+
__Author__ = """By: Irony
23+
QQ: 892768447
24+
Email: 892768447@qq.com"""
25+
__Copyright__ = "Copyright (c) 2018 Irony"
26+
__Version__ = "Version 1.0"
27+
28+
29+
class ItemWidget(QWidget):
30+
"""自定义的item"""
31+
32+
def __init__(self, text, badge, *args, **kwargs):
33+
super(ItemWidget, self).__init__(*args, **kwargs)
34+
layout = QHBoxLayout(self)
35+
layout.setContentsMargins(0, 0, 0, 0)
36+
layout.addWidget(QLabel(text, self, styleSheet='color: white;'))
37+
layout.addSpacerItem(QSpacerItem(
38+
60, 1, QSizePolicy.Maximum, QSizePolicy.Minimum))
39+
if badge and len(badge) == 2: # 后面带颜色的标签
40+
layout.addWidget(QLabel(
41+
badge[0], self, alignment=Qt.AlignCenter,
42+
styleSheet="""min-width: 80px;
43+
max-width: 80px;
44+
min-height: 38px;
45+
max-height: 38px;
46+
color: white;
47+
border:none;
48+
border-radius: 4px;
49+
background: %s""" % badge[1]
50+
))
51+
52+
53+
class JsonTreeWidget(QTreeWidget):
54+
55+
def __init__(self, *args, **kwargs):
56+
super(JsonTreeWidget, self).__init__(*args, **kwargs)
57+
self.setEditTriggers(self.NoEditTriggers)
58+
self.header().setVisible(False)
59+
# 帮点单击事件
60+
self.itemClicked.connect(self.onItemClicked)
61+
62+
def onItemClicked(self, item):
63+
"""item单击事件"""
64+
if item.url: # 调用浏览器打开网址
65+
webbrowser.open_new_tab(item.url)
66+
67+
def parseData(self, datas, parent=None):
68+
"""解析json数据"""
69+
for data in datas:
70+
url = data.get('url', '')
71+
items = data.get('items', [])
72+
# 生成item
73+
_item = QTreeWidgetItem(parent)
74+
_item.setIcon(0, QIcon(data.get('icon', '')))
75+
_widget = ItemWidget(
76+
data.get('name', ''),
77+
data.get('badge', []),
78+
self
79+
)
80+
_item.url = url # 可以直接设置变量值
81+
self.setItemWidget(_item, 0, _widget)
82+
if url:
83+
continue # 跳过
84+
# 解析儿子
85+
if items:
86+
self.parseData(items, _item)
87+
88+
def loadData(self, path):
89+
"""加载json数据"""
90+
datas = open(path, 'rb').read()
91+
datas = datas.decode(chardet.detect(datas).get('encoding', 'utf-8'))
92+
self.parseData(json.loads(datas), self)
93+
94+
95+
if __name__ == '__main__':
96+
import sys
97+
from PyQt5.QtWidgets import QApplication
98+
app = QApplication(sys.argv)
99+
app.setStyleSheet("""QTreeView {
100+
outline: 0px;
101+
background: rgb(47, 64, 78);
102+
}
103+
QTreeView::item {
104+
min-height: 92px;
105+
}
106+
QTreeView::item:hover {
107+
background: rgb(41, 56, 71);
108+
}
109+
QTreeView::item:selected {
110+
background: rgb(41, 56, 71);
111+
}
112+
113+
QTreeView::item:selected:active{
114+
background: rgb(41, 56, 71);
115+
}
116+
QTreeView::item:selected:!active{
117+
background: rgb(41, 56, 71);
118+
}
119+
120+
QTreeView::branch:open:has-children {
121+
background: rgb(41, 56, 71);
122+
}
123+
124+
QTreeView::branch:has-siblings:!adjoins-item {
125+
background: green;
126+
}
127+
QTreeView::branch:closed:has-children:has-siblings {
128+
background: rgb(47, 64, 78);
129+
}
130+
131+
QTreeView::branch:has-children:!has-siblings:closed {
132+
background: rgb(47, 64, 78);
133+
}
134+
135+
QTreeView::branch:open:has-children:has-siblings {
136+
background: rgb(41, 56, 71);
137+
}
138+
139+
QTreeView::branch:open:has-children:!has-siblings {
140+
background: rgb(41, 56, 71);
141+
}
142+
QTreeView:branch:hover {
143+
background: rgb(41, 56, 71);
144+
}
145+
QTreeView:branch:selected {
146+
background: rgb(41, 56, 71);
147+
}
148+
""")
149+
w = JsonTreeWidget()
150+
w.show()
151+
w.loadData('data.json')
152+
sys.exit(app.exec_())

‎Json生成QTreeWidget/README.md‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
# 通过json数据生成QTreeWidget树形结构
2+
3+
### [Python3.4.4 or Python3.5][PyQt5]
4+
5+
emmmmmm,原理就是那样,,解析每一层json数据中的list,美化就不想弄了.
6+
7+
# 截图
8+
![截图1](ScreenShot/1.png)
8.92 KB
Loading[フレーム]

‎Json生成QTreeWidget/data.json‎

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
[
2+
{
3+
"name": "仪表盘",
4+
"icon": "xxx.png"
5+
},
6+
{
7+
"name": "微信管理",
8+
"icon": "weixin.png",
9+
"badge": [
10+
"火爆",
11+
"#F8AC54"
12+
],
13+
"items": [
14+
{
15+
"name": "爬虫项目管理",
16+
"icon": "xxx.png",
17+
"badge": [
18+
"推荐",
19+
"#23C6C9"
20+
],
21+
"items": [
22+
{
23+
"name": "腾讯课堂"
24+
},
25+
{
26+
"name": "淘宝"
27+
},
28+
{
29+
"name": "京东"
30+
},
31+
{
32+
"name": "天猫"
33+
},
34+
{
35+
"name": "拉钩"
36+
},
37+
{
38+
"name": "BOSS直聘"
39+
}
40+
]
41+
}
42+
]
43+
},
44+
{
45+
"name": "爬虫部署管理",
46+
"icon": "xxx.png"
47+
},
48+
{
49+
"name": "爬虫监控管理",
50+
"icon": "xxx.png"
51+
},
52+
{
53+
"name": "PyQt",
54+
"url": "https://github.com/892768447/PyQt"
55+
}
56+
]

‎Json生成QTreeWidget/weixin.png‎

1.71 KB
Loading[フレーム]

‎QGraphicsView练习/ImageView.py‎

Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
#!/usr/bin/env python
2+
# -*- coding: utf-8 -*-
3+
4+
"""
5+
Created on 2018年3月23日
6+
@author: Irony
7+
@site: https://github.com/892768447
8+
@email: 892768447@qq.com
9+
@file: ImageView
10+
@description: 图片查看
11+
"""
12+
from PyQt5.QtCore import QStandardPaths, Qt
13+
from PyQt5.QtGui import QColor, QPainter, QPixmap
14+
from PyQt5.QtOpenGL import QGLFormat
15+
from PyQt5.QtWidgets import QGraphicsView, QGraphicsScene, QFileDialog, \
16+
QGraphicsItem
17+
18+
19+
__Author__ = 'By: Irony\nQQ: 892768447\nEmail: 892768447@qq.com'
20+
__Copyright__ = 'Copyright (c) 2018 Irony'
21+
__Version__ = 1.0
22+
23+
24+
class GraphicsView(QGraphicsView):
25+
26+
# 背景区域颜色
27+
backgroundColor = QColor(28, 31, 34)
28+
29+
def __init__(self, *args, **kwargs):
30+
super(GraphicsView, self).__init__(*args, **kwargs)
31+
self.resize(800, 600)
32+
# 设置背景颜色
33+
self.setBackgroundBrush(self.backgroundColor)
34+
# 缓存背景
35+
self.setCacheMode(self.CacheBackground)
36+
# 设置拖拽样式
37+
# self.setDragMode(self.ScrollHandDrag)
38+
self.setRenderHints(
39+
QPainter.Antialiasing | QPainter.TextAntialiasing | QPainter.SmoothPixmapTransform)
40+
# opengl
41+
if QGLFormat.hasOpenGL():
42+
self.setRenderHint(QPainter.HighQualityAntialiasing)
43+
# 尝试通过分析需要重绘的区域来找到最佳的更新模式
44+
self.setViewportUpdateMode(self.SmartViewportUpdate)
45+
self._scene = QGraphicsScene(-400, -300, 800, 600, self)
46+
self.setScene(self._scene)
47+
48+
# 图片item
49+
self._itemImage = None
50+
51+
def keyReleaseEvent(self, event):
52+
"""按键处理事件"""
53+
self._scaleImage(event)
54+
super(GraphicsView, self).keyReleaseEvent(event)
55+
56+
def closeEvent(self, event):
57+
"""窗口关闭时清空场景中的所有item"""
58+
self._scene.clear()
59+
self._itemImage = None
60+
super(GraphicsView, self).closeEvent(event)
61+
62+
def _scaleImage(self, event):
63+
"""缩放图片操作"""
64+
if not self._itemImage:
65+
return
66+
scale = self._itemImage.scale()
67+
if event.key() == Qt.Key_Plus:
68+
# 放大
69+
if scale >= 0.91:
70+
return
71+
self._itemImage.setScale(scale + 0.1)
72+
elif event.key() == Qt.Key_Minus:
73+
# 缩小
74+
if scale <= 0.11:
75+
return
76+
self._itemImage.setScale(scale - 0.1)
77+
78+
def loadImage(self):
79+
path, _ = QFileDialog.getOpenFileName(
80+
self, '请选择图片', QStandardPaths.writableLocation(QStandardPaths.DesktopLocation), '图片文件(*.jpg *.png)')
81+
if not path:
82+
return
83+
if self._itemImage:
84+
# 删除以前的item
85+
self._scene.removeItem(self._itemImage)
86+
del self._itemImage
87+
self._itemImage = self._scene.addPixmap(QPixmap(path))
88+
self._itemImage.setFlag(QGraphicsItem.ItemIsMovable)
89+
self._itemImage.setScale(0.1) # 默认加载比例
90+
91+
size = self._itemImage.pixmap().size()
92+
# 调整图片在中间
93+
self._itemImage.setPos(
94+
-size.width() * self._itemImage.scale() / 2,
95+
-size.height() * self._itemImage.scale() / 2
96+
)
97+
98+
if __name__ == '__main__':
99+
import sys
100+
import os
101+
print(os.getpid())
102+
from PyQt5.QtWidgets import QApplication, QPushButton
103+
app = QApplication(sys.argv)
104+
w = GraphicsView()
105+
w.show()
106+
ww = QPushButton('选择文件', clicked=w.loadImage)
107+
ww.show()
108+
sys.exit(app.exec_())

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /