0%

tkinter学习

1 Label & Button

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import tkinter as tk
import time

window = tk.Tk()
# window的名字
window.title('kongming234')
# window的长x宽
window.geometry('200x100')
# 定义点击函数中会用到的变量
var = tk.StringVar()
var.set('hello')
# 长和宽的单位是字符,使用textvariable实现对变量的绑定
l = tk.Label(window,textvariable=var,bg='white',font=('Arial',12),width=15,height=2)
# 放置在屏幕中的位置
l.pack()
# 提前定义点击函数
on_hit = False
def hit_me():
print('hit on button')
print(var.get())
global on_hit
if on_hit == False:
on_hit = True
var.set('simulation begin!')
else:
on_hit = False
var.set('already close!')
# 在Window上增加一个button
b = tk.Button(window,text='simulation',width=15,height=2,command=hit_me)
b.pack()
# mainloop就是一个Windows会不断刷新。
window.mainloop()

2 Entry & Text 输入

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import tkinter as tk

plan = ['PLAN A window 50,buffer 25,Ls=0,Lq=0,Ws=0,Wq=0,Pim=0,Pblock=0','PLAN B window 100,buffer 25,Ls=0,Lq=0,Ws=0,Wq=0,Pim=0,Pblock=0','PLAN C window 140,buffer 25,Ls=0,Lq=0,Ws=0,Wq=0,Pim=0,Pblock=0']
window = tk.Tk()
window.title('queue simulation')
window.geometry('500x400')
#定义一个entry,如果输入为密码,那么show='*'就会使得所有东西全部显示为星号。
info = tk.StringVar()
info.set('Please input the lambda of the visiter')
# 创建一个label用于输入提示
info_label = tk.Label(window,textvariable=info,height=1)
info_label.pack()
e = tk.Entry(window,show=None)
e.pack()
def insert_point():
var = e.get()
# 将var放入指针的位置
t.insert('insert','the value of lambda is:'+var+'\n')
info.set('input success')
# 在text的第一行的第一列输入var,为t.insert(1.1,var)
t.insert('end',plan[0]+'\n')
t.insert('end',plan[1]+'\n')
t.insert('end',plan[2]+'\n')
# 定义button
b1 = tk.Button(window,text='simulation',width=15,height=1,command=insert_point)
b1.pack()
# 定义text
t = tk.Text(window,height=4)
t.pack()
window.mainloop()

3 Canvas

canvas参数
Canvas1

1
2
3
4
5
6
7
8
9
10
11
import tkinter as tk

window = tk.Tk()
window.title('queue simulation')
window.geometry('1000x1000')
# 创建画布
canvas = tk.Canvas(window,bg='blue',height=1000,width=1000)
img_file = tk.PhotoImage(file='cat.png')
image = canvas.create_image(0,0,anchor='nw',image=img_file)
canvas.pack()
window.mainloop()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
# 参考代码
from cProfile import label
import datetime
from datetime import timedelta
import math #季度推算
from dateutil.relativedelta import * #月度推算
import tkinter as tk # 使用Tkinter前需要先导入
from tkinter import *
import os,re,sys
import numpy as np
import pandas as pd #导入pandas库
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] # 用黑体显示中文
plt.rcParams['axes.unicode_minus']=False # 正常显示负号
import mpl_toolkits.axisartist as axisartist
from mpl_toolkits.axisartist.axislines import SubplotZero
from mpl_toolkits.axes_grid1.inset_locator import inset_axes
from mpl_toolkits.axes_grid1.inset_locator import mark_inset

window = tk.Tk()
window.title('数据分析助手01.03')
window.geometry('1000x700') # 这里的乘是小x
biaoti = tk.Label(window, text="数 据 分 析 助 手", fg='blue',font=('Batang', 20), width=30)
biaoti.place(x=250,y=30) #
# 在图形界面上创建一个标签label用以显示并放置
var1 = tk.StringVar() # 创建变量,用var1用来接收鼠标点击具体选项的内容
l = tk.Label(window, bg='white', fg='red',font=('Arial', 10), width=20, textvariable=var1)
l.place(x=250,y=120)

lweidu = tk.Label(window, text="数据维度(季输1/周输2/年输3)\n(空值默认为月,其他必输):")
lweidu.place(x=50,y=160) #
NUM_weidu = tk.StringVar()
NUM_weidu.set("")
date_weidu =tk.Entry(window,text = "",width=20,textvariable = NUM_weidu)
date_weidu.place(x=50,y=200)

lshu = tk.Label(window, text="请输入要处理几期数据\n(空值默认为2):")
lshu.place(x=50,y=230) #
NUM0 = tk.StringVar()
NUM0.set("")
date_num =tk.Entry(window,text = "",width=20,textvariable = NUM0)
date_num.place(x=50,y=270)

lye = tk.Label(window, text="请输入最后的月/季/周\n(空值默认为上月):")
lye.place(x=50,y=300) #
date_m0 = tk.StringVar()
date_m0.set("")
date_mm =tk.Entry(window,text = "",width=20, textvariable = date_m0)
date_mm.place(x=50,y=340)

lye1 = tk.Label(window, text="是否6类特价商品\n(是输1/空值默认为否):")
lye1.place(x=50,y=370) #
M3_M9 = tk.StringVar()
M3_M9.set("")
M3M9 =tk.Entry(window,text = "",width=20, textvariable = M3_M9)
M3M9.place(x=50,y=410)
v3_list0=['总公司下载数据', '新员工销售统计','老员工销售统计','单个商品进出货数据','库存商品统计','季度分公司分级']#建立一个列表,数据库种类,"非法金融活动模型",'总行下发分行数据'

def print_selection1(): # 创建一个方法用于按钮的点击事件
value = lb.get(lb.curselection()) # 获取当前选中的报表种类
var1.set(value) # 为label设置值
fenghang1 = ['广东', '珠海', '汕头', '潮州', '韶关', '河源', '梅州', '惠州', '汕尾', '东莞',\
'中山', '江门', '佛山', '阳江', '湛江', '茂名', '肇庆', '清远', '揭阳', '云浮']

value1=value # 此时value是报表种类的名称,value1
print("\n下面开始处理:%s" % (value1))

var4 = tk.StringVar()# 创建Listbox并为其添加内容
var4.set(fenghang1) # 为变量var4设置值
var2 = tk.StringVar() # 创建变量,用var2用来接收鼠标点击具体选项的内容
l2 = tk.Label(window, bg='white', fg='red',font=('Arial', 10), width=16, textvariable=var2)
l2.place(x=480,y=120)
def print_selection2(): # 创建一个方法用于按钮的点击事件
value = lb_2.get(lb_2.curselection()) # 获取当前选中的分公司名称
var2.set(value) # 为label设置值
value2=value #这里value2是分公司的名称
#下面导入数据表

var5 = tk.StringVar() # 创建变量,用var5用来接收鼠标点击具体选项的内容,图的种类名称
l3 = tk.Label(window, bg='white', fg='red',font=('Arial', 10), width=26, textvariable=var5)
l3.place(x=680,y=120)
def print_selection3(): # 创建一个方法用于按钮的点击事件
Aa = tk.Label(window, bg='#f4f4f4',fg="blue",font=("Arial",10),width=90,height=10,text ='',wraplength = 656,justify = 'left')#创建一个显示文字分析的窗口
Aa.place(x=120,y=480)# 文字分析窗口
value = lb_3.get(lb_3.curselection()) # 获取当前选中的图的名称
var5.set(value) # 为label设置值
value3=value # 此时value是图的种类名称

def qushitu(num_list1,num_list2,label_list0): #自定义一个函数,画变化趋势图
plt.close() #清除之前的图形
fig = plt.figure(num=1, figsize=(9,5),dpi=90)# 共享坐标轴 方法一
#引入数据(略),具体数据省略了。。。。。。
# 只共享X轴 sharex
ax2 = plt.subplot(212, sharex=ax1)
plt.show()

if value =="销售任务(实际销量)变化趋势图" or value =='新员工销售任务(实际销量)变化趋势图':
#引入数据(略)
num_list1 = [1]
num_list2 = [2]
label_list0 = []
qushitu(num_list1,num_list2,label_list0)
if value =="本期出货数量及商品占比图":
plt.close() #清除之前的图形
fig = plt.figure(num=2, figsize=(7, 4))
ax1 = fig.add_subplot(1, 1, 1)
#引入数据(略)
Y_len2_1 = 1
plt.ylim(0,Y_len2_1) # 限定纵轴的范围
plt.legend(loc='upper left', fontsize=9) # 让图例生效
#要添加的子图
axins = inset_axes(ax1,width=2.5, height=1.2, loc='upper right')
# ax1 大图, width height分别为子图的宽和高,loc 为子图在大图ax1中的相对位置 相应的值有lower left,center right,center
x2 = 1
data2_3 = [0]
cor = 'blue'
axins.bar(x2,dict(data2_3).values(),width=0.4, color=cor,alpha=0.5)
plt.show()


#下面是框架:
lb_3 = tk.Button(window, text='请选择输出图表名称', width=29, height=2, command=print_selection3)# 创建一个按钮并放置,点击按钮调用print_selection函数
lb_3.place(x=680,y=150)
var6 = tk.StringVar()# 创建Listbox并为其添加内容
if value1 == '总公司下载数据':
var6.set(('多期利润分成或本期环比','多期退货统计或本期环比',"按地区统计本期潜在客户数量",'本期出货数量及商品占比图','本期退货原因统计图','机构网点分析','销售任务(实际销量)变化趋势图','多期合并原表')) # 为变量var3设置值
elif value1 == '新员工销售统计':
var6.set(('多期利润分成或本期环比','多期退货统计或本期环比','本期出货数量及商品占比图','本期退货原因统计图','机构网点分析','多期合并原表','按地区统计本期潜在客户数量','销售任务(实际销量)变化趋势图')) # 为变量var3设置值
elif value1 == '老员工销售统计':
var6.set(('多期利润分成或本期环比','多期退货统计或本期环比','本期出货数量及商品占比图','本期退货原因统计图','机构网点分析','多期合并原表','按地区统计本期潜在客户数量','销售任务(实际销量)变化趋势图')) # 为变量var3设置值
elif value1 == '单个商品进出货数据':
model = 'null'
var6.set(model) #("趋势图")
elif value1 == '季度分公司分级':
var6.set(('本季清单','本季各类占比统计表','多期合并原表','本季明细',"(内)外加工数量趋势图",'多期拆分与环比')) #结果
elif value1 == '库存商品统计':
var6.set(('多期退货统计或本期环比','多期合并原表','本期退货原因统计图','(内)外加工数量趋势图'))
# 创建Listbox
lb_3 = tk.Listbox(window, listvariable=var6, width=30, height=13) #将var5的值赋给Listbox
value10 = []
if value10==['M3M4M5M7M8M9'] and value1 != '单个商品进出货数据': #设置第三个选择框中图种类的增减
lb_3.insert('end','M3M4M5M7M8M9') # 从最后一个位置开始加入值,本期排名
if value1 == '季度分公司分级' :
NUM = 6
if NUM>6:
lb_3.insert('end','连续3期排名前','多期结果','近3季升降前10名') #
if value2 == '广东':
lb_3.insert('end','多期利润分成或本期环比','多期退货统计或本期环比','本期退货原因统计图','新员工销售任务(实际销量)变化趋势图')

lb_3.place(x=680,y=200)

lb_2 = tk.Button(window, text='请选择分公司名称', width=18, height=2, command=print_selection2)# 创建一个按钮并放置,点击按钮调用print_selection函数
lb_2.place(x=480,y=150)
# 创建Listbox
lb_2 = tk.Listbox(window, listvariable=var4, width=19, height=13) #将var3的值赋给Listbox,第二个选择菜单的内容,分行或模型名称
lb_2.place(x=480,y=200)

b1 = tk.Button(window, text='请选择数据种类', width=22, height=2, command=print_selection1)# 创建一个按钮并放置,点击按钮调用print_selection函数
b1.place(x=250,y=150)

v3_list = list(set(v3_list0))# 数据库文件夹中所有报表名称的列表,转换为集合再转换为列表,set是列表剔重
var3 = tk.StringVar()# 创建Listbox并为其添加内容
var3.set(v3_list) # 为变量var3设置值,所有报表名称
# 创建Listbox
lb = tk.Listbox(window, listvariable=var3, width=23, height=13) #将var3的值赋给Listbox
lb.place(x=250,y=200)

lm = tk.Label(window,fg="#3066cc",text='维护日期:2021-01-27 如是我闻') # 在图形界面下方创建一个标签label用以放置制作人
lm.pack(side="bottom")
# 主窗口循环显示
window.mainloop()