Tkinter 布局设置
- pack(逐项布局)
def sPinbox(self, master):
Spinbox(master, from_=0, to=10, increment=0.5, wrap=TRUE).pack(fill=BOTH, expand=TRUE)
Spinbox(master, values=('harry', '~ben~', 'lily_w', '黄小明'), wrap=TRUE).pack(fill=BOTH, expand=TRUE)
- grid(类似html的table布局,也有rowspan、colspan的合并单元格参数)
def registEr(self, master):
Label(master, text='用户名').grid(row=0, sticky=W)
Label(master, text='密码').grid(row=1, sticky=W)
self.photo = PhotoImage(file='! Load Tutorial.png')
Label(master, image=self.photo).grid(row=0, column=2, rowspan=2, padx=5, pady=5)
e1 = Entry(master)
e1.grid(row=0, column=1)
e2 = Entry(master, show='*')
e2.grid(row=1, column=1)
def reg():
s1, s2 = e1.get(), e2.get()
if s1 == '111' and s2 == '222':
c['text'] = '登陆成功'
else:
c['text'] = '用户名或密码错误'
e1.delete(0, len(s1))
e2.delete(0, len(s2))
Button(text='提交', width=10, command=reg).grid(row=2, columnspan=3, pady=5)
c = Label(master, text='请输入登录密码')
c.grid(row=2, column=0)
- place(居中用,相对父组件调位)
def plaCe(self, master):
def callback():
print('正中靶心')
n = 1
for i in ['red', 'green', 'yellow']:
n -= 0.25
Label(master, bg=i).place(relx=0.5, rely=0.5, relheight=n, relwidth=n, anchor=CENTER)
Button(master, text='点击', command=callback).place(relx=0.5, rely=0.5, anchor=CENTER)
place的方法 | 说明 |
---|---|
place_configure(**options) | 跟place()一样 |
place_forget() | 1、将组件从屏幕中隐藏 2、可以通过其它布局管理器显示已“删除”的组件 |
place_info() | 以字典的形式返回当前 place 的选项 |
place_slaves() | 1、以列表的形式返回该组件的所有子组件 2、该方法仅适用于父组件 |
slaves() | 跟place_slaves()一样 |
Messagebox
from tkinter import *
from tkinter import messagebox
class App:
def __init__(self, master):
self.mEssageBox(master)
def mEssageBox(self, master):
def asky():
if self.n > len(ls) - 1:
self.n = 0
eval(f"messagebox.{ls[self.n]}('Hello World', '今天爱我吗?')")
self.n += 1
ls = ['askokcancel', 'askquestion', 'askretrycancel', 'askyesno', 'showerror', 'showinfo']
self.n = 0
Button(master, text='问我吧', command=asky).place(relx=.5, rely=.5, anchor=CENTER)
if __name__ == '__main__':
root = Tk()
root.title('TkPainter')
app = App(root)
root.mainloop()
filedialog(文件对话框)
filedialog模块提供了两个函数:askopenfilename(**option) 和 asksaveasfilename(**option),分别用于打开和另存文件。
参数
两个函数可供设置的选项是一样的,如下:
选项 | 含义 |
---|---|
defaultextension | 1、指定文件后缀 2、例如:defaultextension=“.jpg",那么当用户输入一个文件名“Harry”,文件名会自动添加后缀“Harry.jpg" 3、注意:如果用户输入文件名包含后缀,那么这选项不生效 |
filetypes | 1、指定筛选文件类型的下拉菜单选项 2、该选项的值由2元祖构成的列表 3、每个2元祖由(类型名,后缀)构成,例如:filetypes=[(“PNG”,".png"),(“JPG”,’.jpg"),(“GIF”,".gif")] |
initialdir | 1、指定打开/保存文件的默认路径 2、默认路径是当前文件夹 |
parent | 1、如果不指定该选项,那么对话框默认显示在根窗口上 2、如果想要 |
title | 指定文件对话框的标题栏文本 |
from tkinter import *
from tkinter import filedialog
class App:
def __init__(self, master):
self.fhsoj(master)
def fhsoj(self, master):
def openf():
fileName = filedialog.askopenfilename(filetypes=[('PNG', '.png'), ('JPG', '.jpg'), ('GIF', '.gif')])
print(fileName)
Button(master, text='打开文件', command=openf).pack()
if __name__ == '__main__':
root = Tk()
root.title('TkPainter')
app = App(root)
root.mainloop()
补充:
Python.tkinter.打开对话框选择文件文件夹
"""
tkinter.filedialog.asksaveasfilename():选择以什么文件名保存,返回文件名
tkinter.filedialog.asksaveasfile():选择以什么文件保存,创建文件并返回文件流对象
tkinter.filedialog.askopenfilename():选择打开什么文件,返回文件名
tkinter.filedialog.askopenfile():选择打开什么文件,返回IO流对象
tkinter.filedialog.askdirectory():选择目录,返回目录名
tkinter.filedialog.askopenfilenames():选择打开多个文件,以元组形式返回多个文件名
tkinter.filedialog.askopenfiles():选择打开多个文件,以列表形式返回多个IO流对象
"""
if __name__ == '__main__':
try:
pass
except Exception as e:
print(e)
颜色选择器
from tkinter import *
from tkinter import colorchooser
class App:
def __init__(self, master):
self.ColorCho(master)
def ColorCho(self, master):
def calbac():
filename = colorchooser.askcolor()
print(filename)
Button(master, text='选择颜色', command=calbac).pack()
if __name__ == '__main__':
root = Tk()
root.title('TkPainter')
app = App(root)
root.mainloop()