1.设置屏幕最大化方法:
#设置窗口最大化:
#方法一
root = Tk()
w, h = root.maxsize()
root.geometry("{}x{}".format(w, h)) #看好了,中间的是小写字母x
#方法二
root = Tk()
w = root.winfo_screenwidth()
h = root.winfo_screenheight()
root.geometry("%dx%d" %(w, h))
#方法三
root = Tk()
root.attributes("-fullscreen", true)
2.设置输入框默认值:
e = StringVar()
wenben = Entry(root,textvariable=e)
wenben.pack()
e.set(r'默认值')
3.label和pack的使用
| after: | 将组件置于其他组件之后; |
| before: | 将组件置于其他组件之前; |
| anchor: | 组件的对齐方式,顶对齐'n',底对齐's',左'w',右'e' |
| side: | 组件在主窗口的位置,可以为'top','bottom','left','right'(使用时tkinter.TOP,tkinter.E); |
| fill | 填充方式 (Y,垂直,X,水平) |
| expand | 1可扩展,0不可扩展 |
| Anchor | 标签中文本的位置; |
| background(bg) | 背景色; |
| foreground(fg) | 前景色; |
| borderwidth(bd) | 边框宽度; |
| width | 标签宽度; |
| height | 标签高度; |
| bitmap | 标签中的位图; |
| font | 字体; |
| image | 标签中的图片; |
| justify | 多行文本的对齐方式; |
| text | 标签中的文本,可以使用'\n'表示换行 |
| textvariable | 显示文本自动更新,与StringVar等配合着 |
4.分割线的画法
分割线组件Separator ,这是一个ttk组件,这个组件只要设置参数orient来决定是水平分割线,还是竖直分割线。
orient=HORIZONTAL 水平分割线
orient=VERTICAL 竖直分割线(默认)
def create_widgets1(self):
'''frame_putin内的部件'''
# 大标题,标题下面画一条横向分割线
self.label = tk.Label(self.frame_putin,text='入库管理',font=("微软雅黑",15),bg='#aaccff',width=500,height=2,anchor=tk.W,)
self.label.pack()
self.sep0 = ttk.Separator(self.frame_putin, orient='horizontal')
self.sep0.pack(fill='x')
self.name1 = tk.StringVar()
self.count1 = tk.IntVar()
self.price1 = tk.DoubleVar()
# 商品名称,标签、输入框和右边竖向的与商品数量的分割线
self.label = tk.Label(self.frame_putin, text='商品名称:', font=("微软雅黑",12), bg='#aaccff',width=7, height=1, anchor=tk.W)
self.label.pack(side='left',padx=5,pady=5)
self.entry = tk.Entry(self.frame_putin, textvariable=self.name1, width=20)
self.entry.pack(side='left',padx=5,pady=5)
self.sep2 = ttk.Separator(self.frame_putin, orient='vertical')
self.sep2.pack(side='left',padx=30,pady=2,fill='y')
5.frame控件pack_propagate(0)方法:
tkinter中窗口,frame框架控件如果不设置宽度高度,则会根据其中的内容自动设置宽度高度,框架容器设置了宽度高度,如果其内存在控件,则宽度高度失效,自动适应控件大小,如果窗口,框架容器,控件中没有内容,宽度和高度为默认的最小尺寸(可能看不到)。
所以,即使给frame设置了width、heigth,他也会被子控件的大小给覆盖。
此时,使用frame.pack_propagate(0)就可以禁止子控件重置其尺寸。
import tkinter as tk
root = tk.Tk()
ws = root.winfo_screenwidth()
hs = root.winfo_screenheight()
root.geometry('{}x{}'.format(ws, hs))
root.update()
w = root.winfo_width() #获取窗口宽度(单位:像素)
h = root.winfo_height() #获取窗口高度(单位:像素)
frame1 = tk.Frame(root, width=int(w), height=int(h/3), bg='red',border=1)
frame1.pack_propagate(0)
frame1.pack()
frame2 = tk.Frame(root, width=int(w), height=int(h/3)*2, bg='green',border=1)
frame2.pack_propagate(0)
frame2.pack()
label = tk.Label(frame1, text='one', bg='yellow').pack(side='bottom')
label = tk.Label(frame2, text='two').pack()
root.mainloop()
运行结果:

6.给frame加上滚动条
Scrollbar 一般和其他控件联合使用,当被显示的控件的内容大于可显示区域时,使用Scrollbar可显示更多的内容。一般垂直滚动条(vertical scrollbar)和Listbox, Text and Canvas联合使用;水平滚动条(horizontal scrollbar)也可作用于Entry。
怎样让scrollbar作用于frame呢?
把frame放在canvas里面(比如填满整个canvas),canvas与scrollbar结合,这样滚动canvas就等于滚动frame了。
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.title('滚动条')
root.geometry('500x300')
root.update()
w = root.winfo_width() #获取窗口宽度(单位:像素)
h = root.winfo_height() #获取窗口高度(单位:像素)
frame = tk.Frame(root, bg='red',width=w, height=h)
frame.pack_propagate(0)
frame.pack()
# 创建滚动条
scrollBar=ttk.Scrollbar(frame,orient='vertical') #竖直滚动条
# 创建画布
#scrollregion=(x1, y1, x2, y2)画布可以被滚动的范围,该选项的值是一个 4 元组(x1, y1, x2, y2)表示的矩形
canvas = tk.Canvas(frame,bg='#aaccff',width=w,height=h,scrollregion=(0,0,500,3000),yscrollcommand=scrollBar.set) # 设置画布的Y轴滚动条函数与垂直滚动条绑定
scrollBar.configure(command=canvas.yview) # 设置垂直滚动条的函数与画布的Y轴滚动条事件绑定
frame1 = tk.Frame(canvas,bg='#aaccff',width=w,borderwidth=1)
for i in range(100):
label = tk.Label(frame1, text=i, bg='#aaccff')
label.pack()
frame1.pack(side='left',fill='both')
scrollBar.pack(side='right',fill='y')
canvas.pack(fill='both')
# canvas创建组件,(0,0)是初始位置,必须有此参数
canvas.create_window((0,0),window=frame1,anchor='nw')
root.mainloop()
运行结果:

end
本文介绍了Tkinter中的关键概念和用法,包括如何设置屏幕最大化,设置输入框默认值,使用label和pack,绘制水平和竖直分割线,理解frame控件的pack_propagate(0)方法以防止自动调整大小,以及如何为frame添加滚动条以显示更多内容。



1594

被折叠的 条评论
为什么被折叠?



