Skip to content

Commit e13d183

Browse files
committed
更新案例
1 parent 5fe9c28 commit e13d183

File tree

5 files changed

+88
-145
lines changed

5 files changed

+88
-145
lines changed

README.md

+16-6
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,15 @@ Gitee: [https://gitee.com/iamxcd/tkinter-helper](https://gitee.com/iamxcd/tkinte
1515
### win10下运行后效果图
1616
![运行后效果图](./files/win10.png)
1717

18+
## 项目定位
19+
当第一次接触到Tkinter,觉得它很方便,兼容性也挺不错,而且是Python自带的,用来写小工具挺方便的。
20+
后面更为了方便设计界面,我开发了Tkinter布局助手,并且开源了。
21+
由于Tkinter本身的不足和我并非要打造一款专业的设计软件,所以我给它的定位是:面向非专业开发人员、Python爱好者等,并且主要是用于小工具开发,所以一些复杂的组件或其他的布局方式将不会去支持。
22+
23+
## 布局助手使用说明文档(详细)
24+
25+
[文档地址](https://www.pytk.net/blog/1660703137.html)
26+
1827
## Tkinter 简介
1928
tkinter 是 Python 自带的标准库,因此无须另行安装,它支持跨平台运行,不仅可以在 Windows 平台上运行,还支持在 Linux 和 Mac 平台上运行。
2029

@@ -124,6 +133,12 @@ pyinstaller ./view.py -F -w
124133
# -w 不展示命令框
125134
```
126135

136+
137+
## 开源说明
138+
个人用户开源免费使用,禁止用于商业用途。
139+
目前项目分为master和pro分支,pro暂不开源。版本命名目前master分支是2.\*,pro分支后面将3.\*
140+
两者区别,master分支仅支持本地缓存存储,pro增加了用户模块,支持多项目管理,文件存储在服务器上。
141+
127142
## 二次开发
128143

129144
本套系统基于Vue实现
@@ -142,9 +157,4 @@ npm run build
142157

143158
## 交流群
144159

145-
QQ群: 788392508
146-
147-
## 项目定位以及开源说明
148-
当第一次接触到Tkinter,觉得它很方便,兼容性也挺不错,而且是Python自带的,用来写小工具挺不错。
149-
后来为了方便设计界面,我开发了Tkinter布局助手,并且开源了(个人用户开源免费使用,如需商用请联系作者授权)。
150-
由于Tkinter本身的不足和我并非要打造一款专业的设计软件,所以我给它的定位是:面向非专业桌面开发人员、Python爱好者等,并且主要是用于小工具开发,所以一些复杂的组件或其他的布局方式将不会去支持。[布局助手使用说明看这](https://www.pytk.net/blog/1660703137.html)
160+
QQ群: 788392508

files/demo.py

+71-138
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
1-
1+
"""
2+
本代码由[Tkinter布局助手]生成
3+
当前版本:2.5.3
4+
官网:https://www.pytk.net/tkinter-helper
5+
QQ交流群:788392508
6+
"""
27
from tkinter import *
38
from tkinter.ttk import *
49

@@ -7,174 +12,102 @@ class WinGUI(Tk):
712
def __init__(self):
813
super().__init__()
914
self.__win()
10-
self.tk_table_l8cs3hj1 = self.__tk_table_l8cs3hj1()
11-
self.tk_frame_l8cs3mqf = Frame_l8cs3mqf(self)
12-
self.tk_label_frame_l8cs3r61 = Frame_l8cs3r61(self)
13-
self.tk_text_l8cs47v5 = self.__tk_text_l8cs47v5()
14-
self.tk_list_box_l8cs4gan = self.__tk_list_box_l8cs4gan()
15-
self.tk_tabs_l8cs4smw = Frame_l8cs4smw(self)
16-
self.tk_select_box_l8cs5os2 = self.__tk_select_box_l8cs5os2()
15+
self.tk_label_l661vxba = self.__tk_label_l661vxba()
16+
self.tk_input_dir = self.__tk_input_dir()
17+
self.tk_button_select_dir = self.__tk_button_select_dir()
18+
self.tk_button_start = self.__tk_button_start()
19+
self.tk_table_list = self.__tk_table_list()
20+
self.tk_label_l661zmw9 = self.__tk_label_l661zmw9()
21+
self.tk_label_total_file = self.__tk_label_total_file()
22+
self.tk_label_l66208uy = self.__tk_label_l66208uy()
23+
self.tk_label_total_page = self.__tk_label_total_page()
1724

1825
def __win(self):
19-
self.title("我是标题 ~ Tkinter布局助手")
26+
self.title("PDF页面统计")
2027
# 设置窗口大小、居中
21-
width = 600
22-
height = 500
28+
width = 460
29+
height = 300
2330
screenwidth = self.winfo_screenwidth()
2431
screenheight = self.winfo_screenheight()
2532
geometry = '%dx%d+%d+%d' % (width, height,
2633
(screenwidth - width) / 2, (screenheight - height) / 2)
2734
self.geometry(geometry)
2835
self.resizable(width=False, height=False)
2936

30-
def __tk_table_l8cs3hj1(self):
37+
def __tk_label_l661vxba(self):
38+
label = Label(self, text="文件夹", anchor="center")
39+
label.place(x=10, y=10, width=68, height=24)
40+
return label
41+
42+
def __tk_input_dir(self):
43+
ipt = Entry(self)
44+
ipt.place(x=90, y=10, width=150, height=24)
45+
return ipt
46+
47+
def __tk_button_select_dir(self):
48+
btn = Button(self, text="选择文件夹")
49+
btn.place(x=250, y=10, width=110, height=24)
50+
return btn
51+
52+
def __tk_button_start(self):
53+
btn = Button(self, text="开始统计")
54+
btn.place(x=370, y=10, width=80, height=24)
55+
return btn
56+
57+
def __tk_table_list(self):
3158
# 表头字段 表头宽度
32-
columns = {"ID": 50, "网站名": 100, "地址": 300}
59+
columns = {"ID": 88, "字段#1": 132, "字段#2": 220}
3360
# 初始化表格 表格是基于Treeview,tkinter本身没有表格。show="headings" 为隐藏首列。
3461
tk_table = Treeview(self, show="headings", columns=list(columns))
3562
for text, width in columns.items(): # 批量设置列属性
3663
tk_table.heading(text, text=text, anchor='center')
3764
tk_table.column(text, anchor='center', width=width,
3865
stretch=False) # stretch 不自动拉伸
3966

40-
data = [
41-
[1, "github", "https://github.com/iamxcd/tkinter-helper"],
42-
[2, "演示地址", "https://www.pytk.net/tkinter-helper"]
43-
]
44-
45-
# 导入初始数据
46-
for values in data:
47-
tk_table.insert('', END, values=values)
48-
49-
tk_table.place(x=30, y=420, width=450, height=70)
67+
# 插入数据示例
68+
# data = [
69+
# [1, "github", "https://github.com/iamxcd/tkinter-helper"],
70+
# [2, "演示地址", "https://www.pytk.net/tkinter-helper"]
71+
# ]
72+
#
73+
# # 导入初始数据
74+
# for values in data:
75+
# tk_table.insert('', END, values=values)
76+
77+
tk_table.place(x=10, y=50, width=440, height=200)
5078
return tk_table
5179

52-
def __tk_text_l8cs47v5(self):
53-
text = Text(self)
54-
text.place(x=450, y=50, width=150, height=100)
55-
return text
56-
57-
def __tk_list_box_l8cs4gan(self):
58-
lb = Listbox(self)
59-
lb.insert(END, "列表框")
60-
lb.insert(END, "Python")
61-
lb.insert(END, "Tkinter Helper")
62-
lb.place(x=20, y=190, width=150, height=100)
63-
return lb
64-
65-
def __tk_select_box_l8cs5os2(self):
66-
cb = Combobox(self, state="readonly")
67-
cb['values'] = ("下拉选择框", "Python", "Tkinter Helper")
68-
cb.place(x=10, y=320, width=150, height=24)
69-
return cb
70-
71-
72-
class Frame_l8cs3mqf(Frame):
73-
def __init__(self, parent):
74-
super().__init__(parent)
75-
self.__frame()
76-
self.tk_input_l8cs3oe4 = self.__tk_input_l8cs3oe4()
77-
self.tk_radio_button_l8cs4cw1 = self.__tk_radio_button_l8cs4cw1()
78-
self.tk_check_button_l8cs4ect = self.__tk_check_button_l8cs4ect()
79-
80-
def __frame(self):
81-
self.place(x=20, y=10, width=200, height=150)
82-
83-
def __tk_input_l8cs3oe4(self):
84-
ipt = Entry(self)
85-
ipt.place(x=30, y=40, width=150, height=24)
86-
return ipt
87-
88-
def __tk_radio_button_l8cs4cw1(self):
89-
rb = Radiobutton(self, text="单选框")
90-
rb.place(x=10, y=80, width=80, height=24)
91-
return rb
92-
93-
def __tk_check_button_l8cs4ect(self):
94-
cb = Checkbutton(self, text="多选框")
95-
cb.place(x=100, y=80, width=80, height=24)
96-
return cb
97-
98-
99-
class Frame_l8cs3r61(LabelFrame):
100-
def __init__(self, parent):
101-
super().__init__(parent)
102-
self.__frame()
103-
self.tk_label_l8cs3u95 = self.__tk_label_l8cs3u95()
104-
self.tk_button_l8cs3w0i = self.__tk_button_l8cs3w0i()
105-
106-
def __frame(self):
107-
self.configure(text="标签容器")
108-
self.place(x=240, y=20, width=200, height=150)
109-
110-
def __tk_label_l8cs3u95(self):
111-
label = Label(self, text="标签")
112-
label.place(x=30, y=40, width=50, height=24)
80+
def __tk_label_l661zmw9(self):
81+
label = Label(self, text="文件数", anchor="center")
82+
label.place(x=10, y=260, width=50, height=24)
11383
return label
11484

115-
def __tk_button_l8cs3w0i(self):
116-
btn = Button(self, text="按钮")
117-
btn.place(x=130, y=30, width=50, height=24)
118-
return btn
119-
120-
121-
class Frame_l8cs4smw(Notebook):
122-
def __init__(self, parent):
123-
super().__init__(parent)
124-
self.__frame()
125-
126-
def __frame(self):
127-
128-
self.tk_tabs_l8cs4smw_0 = Frame_l8cs4smw_0(self)
129-
self.add(self.tk_tabs_l8cs4smw_0, text="选项卡1")
130-
131-
self.tk_tabs_l8cs4smw_1 = Frame_l8cs4smw_1(self)
132-
self.add(self.tk_tabs_l8cs4smw_1, text="选项卡2")
133-
134-
self.place(x=200, y=200, width=371, height=188)
135-
136-
137-
class Frame_l8cs4smw_0(Frame):
138-
def __init__(self, parent):
139-
super().__init__(parent)
140-
self.__frame()
141-
self.tk_progressbar_l8cs56bp = self.__tk_progressbar_l8cs56bp()
142-
self.tk_button_l8cs6lpz = self.__tk_button_l8cs6lpz()
143-
144-
def __frame(self):
145-
self.place(x=200, y=200, width=371, height=188)
146-
147-
def __tk_progressbar_l8cs56bp(self):
148-
progressbar = Progressbar(self, orient=HORIZONTAL)
149-
progressbar.place(x=20, y=110, width=150, height=24)
150-
return progressbar
151-
152-
def __tk_button_l8cs6lpz(self):
153-
btn = Button(self, text="按钮")
154-
btn.place(x=180, y=50, width=50, height=24)
155-
return btn
156-
157-
158-
class Frame_l8cs4smw_1(Frame):
159-
def __init__(self, parent):
160-
super().__init__(parent)
161-
self.__frame()
162-
self.tk_button_l8cs5hjl = self.__tk_button_l8cs5hjl()
85+
def __tk_label_total_file(self):
86+
label = Label(self, text="0", anchor="center")
87+
label.place(x=80, y=260, width=50, height=24)
88+
return label
16389

164-
def __frame(self):
165-
self.place(x=200, y=200, width=371, height=188)
90+
def __tk_label_l66208uy(self):
91+
label = Label(self, text="总页数", anchor="center")
92+
label.place(x=240, y=260, width=50, height=24)
93+
return label
16694

167-
def __tk_button_l8cs5hjl(self):
168-
btn = Button(self, text="按钮")
169-
btn.place(x=90, y=90, width=50, height=24)
170-
return btn
95+
def __tk_label_total_page(self):
96+
label = Label(self, text="0", anchor="center")
97+
label.place(x=310, y=260, width=50, height=24)
98+
return label
17199

172100

173101
class Win(WinGUI):
174102
def __init__(self):
175103
super().__init__()
104+
self.config(menu=self.create_menu())
176105
self.__event_bind()
177106

107+
def create_menu(self):
108+
menu = Menu(self, tearoff=False)
109+
return menu
110+
178111
def __event_bind(self):
179112
pass
180113

files/demo.tk

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
eyJ3aW4iOnsidG9wIjoxMzAsImxlZnQiOjQ1MCwid2lkdGgiOjYwMCwiaGVpZ2h0Ijo1MDAsImlkIjoibDhjczF5bzYiLCJ0eXBlIjoidGtfd2luIiwidGV4dCI6IuaIkeaYr+agh+mimCB+IFRraW50ZXLluIPlsYDliqnmiYsiLCJlbGVtZW50cyI6W3sidG9wIjo0MjAsImxlZnQiOjMwLCJ3aWR0aCI6NDUwLCJoZWlnaHQiOjcwLCJpZCI6Imw4Y3MzaGoxIiwidHlwZSI6InRrX3RhYmxlIiwiZXZlbnRfYmluZF9saXN0IjpbXX0seyJ0b3AiOjEwLCJsZWZ0IjoyMCwid2lkdGgiOjIwMCwiaGVpZ2h0IjoxNTAsImZyYW1lIjp0cnVlLCJlbGVtZW50cyI6W3sidG9wIjo0MCwibGVmdCI6MzAsIndpZHRoIjoxNTAsImhlaWdodCI6MjQsImlkIjoibDhjczNvZTQiLCJ0eXBlIjoidGtfaW5wdXQiLCJldmVudF9iaW5kX2xpc3QiOltdfSx7InRvcCI6ODAsImxlZnQiOjEwLCJ3aWR0aCI6ODAsImhlaWdodCI6MjQsInRleHQiOiLljZXpgInmoYYiLCJpZCI6Imw4Y3M0Y3cxIiwidHlwZSI6InRrX3JhZGlvX2J1dHRvbiJ9LHsidG9wIjo4MCwibGVmdCI6MTAwLCJ3aWR0aCI6ODAsImhlaWdodCI6MjQsInRleHQiOiLlpJrpgInmoYYiLCJpZCI6Imw4Y3M0ZWN0IiwidHlwZSI6InRrX2NoZWNrX2J1dHRvbiJ9XSwiaWQiOiJsOGNzM21xZiIsInR5cGUiOiJ0a19mcmFtZSJ9LHsidG9wIjoyMCwibGVmdCI6MjQwLCJ3aWR0aCI6MjAwLCJoZWlnaHQiOjE1MCwiZnJhbWUiOnRydWUsImVsZW1lbnRzIjpbeyJ0b3AiOjQwLCJsZWZ0IjozMCwid2lkdGgiOjUwLCJoZWlnaHQiOjI0LCJ0ZXh0Ijoi5qCH562+IiwiaWQiOiJsOGNzM3U5NSIsInR5cGUiOiJ0a19sYWJlbCIsImV2ZW50X2JpbmRfbGlzdCI6W119LHsidG9wIjozMCwibGVmdCI6MTMwLCJ3aWR0aCI6NTAsImhlaWdodCI6MjQsInRleHQiOiLmjInpkq4iLCJpZCI6Imw4Y3MzdzBpIiwidHlwZSI6InRrX2J1dHRvbiIsImV2ZW50X2JpbmRfbGlzdCI6W119XSwidGV4dCI6Iuagh+etvuWuueWZqCIsImlkIjoibDhjczNyNjEiLCJ0eXBlIjoidGtfbGFiZWxfZnJhbWUiLCJldmVudF9iaW5kX2xpc3QiOltdfSx7InRvcCI6NTAsImxlZnQiOjQ1MCwid2lkdGgiOjE1MCwiaGVpZ2h0IjoxMDAsImlkIjoibDhjczQ3djUiLCJ0eXBlIjoidGtfdGV4dCIsImV2ZW50X2JpbmRfbGlzdCI6W119LHsidG9wIjoxOTAsImxlZnQiOjIwLCJ3aWR0aCI6MTUwLCJoZWlnaHQiOjEwMCwiaWQiOiJsOGNzNGdhbiIsInR5cGUiOiJ0a19saXN0X2JveCJ9LHsidG9wIjoyMDAsImxlZnQiOjIwMCwid2lkdGgiOjM3MSwiaGVpZ2h0IjoxODgsImZyYW1lIjp0cnVlLCJjdXJUYWIiOjAsInRhYnMiOlsi6YCJ6aG55Y2hMSIsIumAiemhueWNoTIiXSwiZWxlbWVudHMiOlt7InRvcCI6MTEwLCJsZWZ0IjoyMCwid2lkdGgiOjE1MCwiaGVpZ2h0IjoyNCwiaWQiOiJsOGNzNTZicCIsInR5cGUiOiJ0a19wcm9ncmVzc2JhciIsInRhYiI6MCwiZXZlbnRfYmluZF9saXN0IjpbXX0seyJ0b3AiOjkwLCJsZWZ0Ijo5MCwid2lkdGgiOjUwLCJoZWlnaHQiOjI0LCJ0ZXh0Ijoi5oyJ6ZKuIiwiaWQiOiJsOGNzNWhqbCIsInR5cGUiOiJ0a19idXR0b24iLCJ0YWIiOjF9LHsidG9wIjo1MCwibGVmdCI6MTgwLCJ3aWR0aCI6NTAsImhlaWdodCI6MjQsInRleHQiOiLmjInpkq4iLCJpZCI6Imw4Y3M2bHB6IiwidHlwZSI6InRrX2J1dHRvbiIsInRhYiI6MH1dLCJpZCI6Imw4Y3M0c213IiwidHlwZSI6InRrX3RhYnMiLCJldmVudF9iaW5kX2xpc3QiOltdfSx7InRvcCI6MzIwLCJsZWZ0IjoxMCwid2lkdGgiOjE1MCwiaGVpZ2h0IjoyNCwiaWQiOiJsOGNzNW9zMiIsInR5cGUiOiJ0a19zZWxlY3RfYm94IiwiZXZlbnRfYmluZF9saXN0IjpbXX1dLCJ2aXJ0dWFsX2V2ZW50cyI6W10sImV2ZW50X2JpbmRfbGlzdCI6W119fQ==
1+
eyJ3aW4iOnsidG9wIjo4MywibGVmdCI6MjI1LCJ3aWR0aCI6NDYwLCJoZWlnaHQiOjMwMCwiaWQiOiJsYmtoMm5kdiIsInR5cGUiOiJ0a193aW4iLCJ0ZXh0IjoiUERG6aG16Z2i57uf6K6hIiwiZnJhbWUiOnRydWUsImVsZW1lbnRzIjpbeyJ0b3AiOjEwLCJsZWZ0IjoxMCwid2lkdGgiOjY4LCJldmVudF9iaW5kX2xpc3QiOltdLCJpc19zaG93Ijp0cnVlLCJoZWlnaHQiOjI0LCJ0ZXh0Ijoi5paH5Lu25aS5IiwiaWQiOiJsNjYxdnhiYSIsInR5cGUiOiJ0a19sYWJlbCJ9LHsidG9wIjoxMCwibGVmdCI6OTAsIndpZHRoIjoxNTAsImV2ZW50X2JpbmRfbGlzdCI6W10sImlzX3Nob3ciOnRydWUsImhlaWdodCI6MjQsImlkIjoiZGlyIiwidHlwZSI6InRrX2lucHV0In0seyJ0b3AiOjEwLCJsZWZ0IjoyNTAsIndpZHRoIjoxMTAsImV2ZW50X2JpbmRfbGlzdCI6W10sImlzX3Nob3ciOnRydWUsImhlaWdodCI6MjQsInRleHQiOiLpgInmi6nmlofku7blpLkiLCJpZCI6InNlbGVjdF9kaXIiLCJ0eXBlIjoidGtfYnV0dG9uIn0seyJ0b3AiOjEwLCJsZWZ0IjozNzAsIndpZHRoIjoiODAiLCJldmVudF9iaW5kX2xpc3QiOltdLCJpc19zaG93Ijp0cnVlLCJoZWlnaHQiOjI0LCJ0ZXh0Ijoi5byA5aeL57uf6K6hIiwiaWQiOiJzdGFydCIsInR5cGUiOiJ0a19idXR0b24ifSx7InRvcCI6NTAsImxlZnQiOjEwLCJ3aWR0aCI6NDQwLCJldmVudF9iaW5kX2xpc3QiOltdLCJpc19zaG93Ijp0cnVlLCJoZWlnaHQiOiIyMDAiLCJjb2x1bW5zIjpbeyJuYW1lIjoiSUQiLCJ3aWR0aCI6MjB9LHsibmFtZSI6IuWtl+autSMxIiwid2lkdGgiOjMwfSx7Im5hbWUiOiLlrZfmrrUjMiIsIndpZHRoIjo1MH1dLCJpZCI6Imxpc3QiLCJ0eXBlIjoidGtfdGFibGUifSx7InRvcCI6MjYwLCJsZWZ0IjoxMCwid2lkdGgiOjUwLCJldmVudF9iaW5kX2xpc3QiOltdLCJpc19zaG93Ijp0cnVlLCJoZWlnaHQiOjI0LCJ0ZXh0Ijoi5paH5Lu25pWwIiwiaWQiOiJsNjYxem13OSIsInR5cGUiOiJ0a19sYWJlbCJ9LHsidG9wIjoiMjYwIiwibGVmdCI6ODAsIndpZHRoIjo1MCwiZXZlbnRfYmluZF9saXN0IjpbXSwiaXNfc2hvdyI6dHJ1ZSwiaGVpZ2h0IjoyNCwidGV4dCI6IjAiLCJpZCI6InRvdGFsX2ZpbGUiLCJ0eXBlIjoidGtfbGFiZWwifSx7InRvcCI6IjI2MCIsImxlZnQiOjI0MCwid2lkdGgiOjUwLCJldmVudF9iaW5kX2xpc3QiOltdLCJpc19zaG93Ijp0cnVlLCJoZWlnaHQiOjI0LCJ0ZXh0Ijoi5oC76aG15pWwIiwiaWQiOiJsNjYyMDh1eSIsInR5cGUiOiJ0a19sYWJlbCJ9LHsidG9wIjoiMjYwIiwibGVmdCI6MzEwLCJ3aWR0aCI6NTAsImV2ZW50X2JpbmRfbGlzdCI6W10sImlzX3Nob3ciOnRydWUsImhlaWdodCI6MjQsInRleHQiOiIwIiwiaWQiOiJ0b3RhbF9wYWdlIiwidHlwZSI6InRrX2xhYmVsIn1dLCJldmVudF9iaW5kX2xpc3QiOltdLCJtZW51cyI6W119LCJuYW1lIjoiVGtpbnRlcuW4g+WxgOWKqeaJiyIsIndlYiI6Imh0dHBzOi8vd3d3LnB5dGsubmV0L3RraW50ZXItaGVscGVyIiwiZ2l0aHViIjoiaHR0cHM6Ly9naXRodWIuY29tL2lhbXhjZC90a2ludGVyLWhlbHBlciIsImdpdGVlIjoiaHR0cHM6Ly9naXRlZS5jb20vaWFteGNkL3RraW50ZXItaGVscGVyIiwidmVyc2lvbiI6IjIuNS4zIiwicXFfZ3JvdXAiOiI3ODgzOTI1MDgifQ==

files/img.png

-10.5 KB
Loading

files/win10.png

-34.7 KB
Loading

0 commit comments

Comments
 (0)