tkinter常用窗口
用tkinter做窗口有一段时间了,常用的窗口就那几个,要是不强求美观,以下代码可以直接拿去用
一个带名字,内含空白frame框的窗口
from tkinter import *
def win_frame(title):
win = Tk()
win.title(title)
frame = Frame(win)
frame.pack(padx=20, pady=20)
return win, frame
win, frame = win_frame("窗口名称")
一个登录窗口
一个带名字,内含空白frame的窗口。frame内用grid放置用户名和密码。frame外用pack放置确认按钮
def login_win():
def command1():
account = entry1.get()
password = entry2.get()
print(account, password)
win, frame = win_frame("登录窗口")
Label(frame, text="账户:", width=5).grid(row=0, column=0)
Label(frame, text="密码:", width=5).grid(row=1, column=0)
entry1 = Entry(frame, width=20)
entry2 = Entry(frame, width=20)
entry1.grid(row=0, column=1)
entry2.grid(row=1, column=1)
Button(win, text="确认", command=command1, width=12).pack(pady=10)
login_win()
一个带提示语的多行文本框
def label_text_button(parent, label, width=None, height=None):
from tkinter import scrolledtext
Label(parent, text=label).pack(anchor=W)
text = scrolledtext.ScrolledText(parent, width=width, height=height)
text.pack()
button = Button(parent, text='确认', width=12)
button.pack(pady=20)
return text, button
def command1(event):
a = text.get(0.0, END)
print(a)
win, frame = win_frame('窗口标题')
text, button = label_text_button(frame, "提示文本", width=30, height=10)
button.bind("<Button-1>", command1)
创建table样式的多列组件
部件以【行号+列号】命名,方便后续操作。
labels为标签行,commands为创建组件命令,widths为每个组件的宽度,三者均为列表
def frame_table(parent, labels, commands, widths, row=1):
D = {}
for c in range(len(labels)):
Label(frame, text=labels[c]).grid(row=0, column=c, padx=1, pady=1)
for r in range(row):
name = f"{r}{c}"
D[name] = commands[c](frame, width=widths[c])
D[name].grid(row=1+r, column=c, pady=1, padx=1)
return frame, D
win, frame = win_frame('窗口标题')
frame, D = frame_table(frame, ["第一列", "第二列", "第三列"], [Label, Entry, Button], [10, 15, 12], row=2)
print(D)
#部件字典:{'00': <tkinter.Label object .!frame.!label2>, '10': <tkinter.Label object .!frame.!label3>, '01': <tkinter.Entry object .!frame.!entry>, '11': <tkinter.Entry object .!frame.!entry2>, '02': <tkinter.Button object .!frame.!button>, '12': <tkinter.Button object .!frame.!button2>}