Skip to content

Commit c3cb793

Browse files
muyrloonghao
authored andcommitted
feat: add theme var for big view scale phenom-films#65
1 parent 1a652e5 commit c3cb793

File tree

4 files changed

+108
-9
lines changed

4 files changed

+108
-9
lines changed

dayu_widgets/item_view.py

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -361,20 +361,27 @@ def __init__(self, parent=None):
361361
self.setResizeMode(QtWidgets.QListView.Adjust)
362362
self.setMovement(QtWidgets.QListView.Static)
363363
self.setSpacing(10)
364-
self.setIconSize(QtCore.QSize(128, 128))
364+
default_size = dayu_theme.big_view_default_size
365+
self.setIconSize(QtCore.QSize(default_size, default_size))
366+
367+
def scale_size(self, factor):
368+
"""Scale the icon size."""
369+
new_size = self.iconSize() * factor
370+
max_size = dayu_theme.big_view_max_size
371+
min_size = dayu_theme.big_view_min_size
372+
if new_size.width() > max_size:
373+
new_size = QtCore.QSize(max_size, max_size)
374+
elif new_size.width() < min_size:
375+
new_size = QtCore.QSize(min_size, min_size)
376+
self.setIconSize(new_size)
365377

366378
def wheelEvent(self, event):
367379
"""Override wheelEvent while user press ctrl, zoom the list view icon size."""
368380
if event.modifiers() == QtCore.Qt.ControlModifier:
369381
num_degrees = event.delta() / 8.0
370382
num_steps = num_degrees / 15.0
371383
factor = pow(1.125, num_steps)
372-
new_size = self.iconSize() * factor
373-
if new_size.width() > 200:
374-
new_size = QtCore.QSize(200, 200)
375-
elif new_size.width() < 24:
376-
new_size = QtCore.QSize(24, 24)
377-
self.setIconSize(new_size)
384+
self.scale_size(factor)
378385
else:
379386
super(MBigView, self).wheelEvent(event)
380387

dayu_widgets/theme.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,9 @@ def get_theme_size():
8989
"progress_bar_radius": int(12 * scale_factor_x) / 2.0,
9090
"toast_size": int(120 * scale_factor_x),
9191
"toast_icon_size": int(60 * scale_factor_x),
92+
"big_view_default_size": int(120 * scale_factor_x),
93+
"big_view_max_size": int(400 * scale_factor_x),
94+
"big_view_min_size": int(24 * scale_factor_x),
9295
}
9396

9497

dayu_widgets/utils.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -547,13 +547,16 @@ def convert_to_round_pixmap(orig_pix):
547547
return pix_map
548548

549549

550-
def generate_text_pixmap(width, height, text, alignment=QtCore.Qt.AlignCenter):
550+
def generate_text_pixmap(
551+
width, height, text, alignment=QtCore.Qt.AlignCenter, bg_color=None
552+
):
551553
# Import local modules
552554
from dayu_widgets import dayu_theme
553555

556+
bg_color = bg_color or dayu_theme.background_in_color
554557
# draw a pixmap with text
555558
pix_map = QtGui.QPixmap(width, height)
556-
pix_map.fill(QtGui.QColor(dayu_theme.background_in_color))
559+
pix_map.fill(QtGui.QColor(bg_color))
557560
painter = QtGui.QPainter(pix_map)
558561
painter.setRenderHints(QtGui.QPainter.TextAntialiasing)
559562
font = painter.font()
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
#!/usr/bin/env python
2+
# -*- coding: utf-8 -*-
3+
###################################################################
4+
# Author: Mu yanru
5+
# Date : 2019.2
6+
7+
###################################################################
8+
# Import future modules
9+
from __future__ import absolute_import
10+
from __future__ import division
11+
from __future__ import print_function
12+
13+
# Import built-in modules
14+
import functools
15+
16+
# Import third-party modules
17+
from Qt import QtGui
18+
from Qt import QtWidgets
19+
20+
# Import local modules
21+
from dayu_widgets import dayu_theme
22+
from dayu_widgets import utils as dayu_utils
23+
from dayu_widgets.divider import MDivider
24+
from dayu_widgets.field_mixin import MFieldMixin
25+
from dayu_widgets.item_view_set import MItemViewSet
26+
from dayu_widgets.tool_button import MToolButton
27+
import examples._mock_data as mock
28+
29+
30+
class ItemViewBigTypeExample(QtWidgets.QWidget, MFieldMixin):
31+
def __init__(self, parent=None):
32+
super(ItemViewBigTypeExample, self).__init__(parent)
33+
self._init_ui()
34+
35+
def _init_ui(self):
36+
item_view_set_thumbnail = MItemViewSet(view_type=MItemViewSet.BigViewType)
37+
item_view_set_thumbnail.set_header_list(
38+
[
39+
{
40+
"label": "Name",
41+
"key": "name",
42+
"searchable": True,
43+
"font": lambda x, y: {"underline": True},
44+
"icon": lambda x, y: y.get("icon"),
45+
}
46+
]
47+
)
48+
add_button = MToolButton().svg("add_line.svg")
49+
add_button.clicked.connect(
50+
functools.partial(item_view_set_thumbnail.item_view.scale_size, 1.1)
51+
)
52+
minus_button = MToolButton().svg("minus_line.svg")
53+
minus_button.clicked.connect(
54+
functools.partial(item_view_set_thumbnail.item_view.scale_size, 0.8)
55+
)
56+
button_lay = QtWidgets.QHBoxLayout()
57+
button_lay.addWidget(minus_button)
58+
button_lay.addWidget(add_button)
59+
button_lay.addStretch()
60+
61+
main_lay = QtWidgets.QVBoxLayout()
62+
main_lay.addWidget(MDivider("Big View"))
63+
main_lay.addLayout(button_lay)
64+
main_lay.addWidget(item_view_set_thumbnail)
65+
self.setLayout(main_lay)
66+
for data_dict in mock.data_list:
67+
icon = QtGui.QIcon(
68+
dayu_utils.generate_text_pixmap(
69+
400,
70+
400,
71+
data_dict.get("name") + "_" + data_dict.get("sex"),
72+
bg_color=dayu_theme.background_selected_color,
73+
)
74+
)
75+
data_dict.update({"icon": icon})
76+
item_view_set_thumbnail.setup_data((mock.data_list * 100))
77+
78+
79+
if __name__ == "__main__":
80+
# Import local modules
81+
from dayu_widgets.qt import application
82+
83+
with application() as app:
84+
test = ItemViewBigTypeExample()
85+
dayu_theme.apply(test)
86+
test.show()

0 commit comments

Comments
 (0)