tkinter中分割线Separator、frame控件pack_propagate(0)、frame滚动条的用法

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

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的使用

pack组件设置位置属性参数
after:将组件置于其他组件之后;
before:将组件置于其他组件之前;
anchor:组件的对齐方式,顶对齐'n',底对齐's',左'w',右'e'
side:组件在主窗口的位置,可以为'top','bottom','left','right'(使用时tkinter.TOP,tkinter.E);
fill填充方式 (Y,垂直,X,水平)
expand1可扩展,0不可扩展

Label组件控制参数
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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值