如何将Tkinter中的LabelFrame移至窗口右上角?
解决Tkinter LabelFrame移至右上角的问题
你遇到的问题根源在于:你嵌套了一层中间Frame,并且默认用pack()让这个Frame居中显示——这个Frame的尺寸只会刚好包裹内部的LabelFrame,所以你给LabelFrame加的sticky='NW'根本没作用,因为它的父容器(中间Frame)没有多余空间供它“吸附”到角落。
下面给你两种简单的解决方法:
方案1:简化布局(推荐)
直接把LabelFrame放在主窗口上,用pack()的anchor参数定位到右上角,不需要中间的Frame:
修改后的完整代码:
import tkinter from tkinter import ttk from tkinter import messagebox import os import openpyxl from tkinter import * window = tkinter.Tk() window.geometry("1200x800") window.title("Data Entry Form") # 直接将LabelFrame放在主窗口上,用anchor='ne'定位到右上角 user_info_frame = tkinter.LabelFrame(window, text="User Information") user_info_frame.pack(anchor='ne', padx=20, pady=10) first_name_label = tkinter.Label(user_info_frame, text="First Name") first_name_label.grid(row=0, column=0) last_name_label = tkinter.Label(user_info_frame, text="Last Name") last_name_label.grid(row=1, column=0) last_name2_label = tkinter.Label(user_info_frame, text="Last Name2") last_name2_label.grid(row=2, column=0) first_name_entry = tkinter.Entry(user_info_frame) last_name_entry = tkinter.Entry(user_info_frame) last_name2_entry = tkinter.Entry(user_info_frame) first_name_entry.grid(row=0, column=1,padx=5, pady=5) last_name_entry.grid(row=1, column=1,padx=5, pady=5) last_name2_entry.grid(row=2, column=1,padx=5, pady=5) # 设置默认值 first_name_entry.insert(0,"XX") last_name_entry.insert(0,"YY") window.mainloop()
方案2:保留中间Frame的修改方式
如果一定要保留中间的Frame,需要调整它的pack()参数让它占满窗口并靠右上,再给LabelFrame的grid()加sticky:
修改这两行代码:
frame = tkinter.Frame(window) frame.pack(fill='both', expand=True, anchor='ne') # 修改pack参数,让Frame占满窗口并靠右上 user_info_frame = tkinter.LabelFrame(frame, text="User Information") user_info_frame.grid(row=0, column=0, padx=20, pady=10, sticky='nw') # 加sticky='nw'让LabelFrame吸附到Frame的左上角
这样也能让LabelFrame固定在窗口右上角。
内容的提问来源于stack exchange,提问作者TRex
相关产品推荐
相关产品推荐

