Python自定义模块 带解释

带滚动条的窗口

由于滚动条不能绑定窗口或框架,只能在窗口下创建frame,在frame下创建canvas,滚动条绑定canvas

  1. 创建窗口,固定其尺寸,不允许修改
  2. 创建画布 - 创建滚动条 - 画布和滚动条放在同一个parent下
  3. 创建frame,其尺寸占画布宽、高的90%
  4. 结合窗口、画布、frame,创建带滚动条的窗口
  5. 为滚动条设置滚动范围(canvas绑定滚动条要设置scrollregion才能生效)
from tkinter import *

def create_win(title=None, size_str=None):
    win = Tk()
    win.title(title)
    win.geometry(size_str)
    win.resizable(0,0)
    return win

def create_canvas(parent):
    canvas = Canvas(parent)
    canvas.pack(fill=Y, side=LEFT)
    bar = Scrollbar(canvas)
    bar.place(relx=0.95, relheight=1.0)   
    bar.configure(command=canvas.yview)
    canvas.config(yscrollcommand=bar.set)
    return canvas

def create_frame(canvas):
    w = canvas.winfo_reqwidth()
    h = canvas.winfo_reqheight()
    frame = Frame(canvas, width=w*0.9, height=h*0.9)
    return frame, w, h
    
def win_with_bar(title=None, size_str=None):
    win         = create_win(title=title, size_str=size_str)     #创建窗口
    canvas      = create_canvas(win)        #创建与滚动条绑定的canvas
    frame, w, h = create_frame(canvas)      #创建frame
    #把frame放在canvas的中心位置,受滚动条影响,中心点横坐标略有偏移
    canvas.create_window((w/2-10, h/2), window=frame)   
    return win, canvas, frame, h

def set_scrollregion(canvas, frame, h):
    L = [i.winfo_reqheight() for i in frame.winfo_children()] #组件高度累加
    frame_h = sum(L) + 10     #部件总高度,加上边距10,作为frame的高度
    y1 = (h - frame_h)/2      #滚动范围的开始位置:(画布高度 - frame高度) / 2
    y2 = y1 + frame_h         #滚动范围的结束位置:开始位置 + frame高度
    canvas.config(scrollregion=(0, y1, 0, y2))
    
'''
#应用程序:创建窗口、画布、frame——在frame中创建部件——根据部件高度,设置滚动范围
win, canvas, frame, h = win_with_bar(title='标题', size_str=None)
for i in range(50): Label(frame, text='占位标签'+str(i)).pack()
set_scrollregion(canvas, frame, h)
'''

常用窗口:标签 + 滚动文本框 + 按钮

  1. 此函数不带参数
  2. 仅在函数内部导入模块
  3. 窗口、框架、标签、文本框、按钮都有名称,并全部返回
  4. 后期可以调用所有组件,也可以调用部分组件
def label_text_button_win():
    import tkinter
    win = tkinter.Tk()
    win.title("标题")    
    frame = tkinter.Frame(win)
    frame.pack(padx=20, pady=20)
    label = tkinter.Label(frame, text="文本行", anchor='sw')
    label.pack(fill='x')    
    from tkinter import scrolledtext
    text = scrolledtext.ScrolledText(frame, width=30, height
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ailsa2019

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值