Python GUI之tkinter窗口视窗教程大集合(基础篇可以看这个链接如下)
https://blog.csdn.net/ahilll/article/details/81531587
一.界面控件放置
1.设置初始化界面大小
root.geometry(‘300x400’)
root.resizable(0,0) 将页面大小锁死
root.mainloop()
2.组件的摆放方式:
1.pack()方式 ->方向/方位摆放方法
2.grid()方式 ->网格摆放方法
3.place()方式 ->定位摆放方法(个人推荐)
3.pack布局介绍
pack()方式:
side 设置组件相对于父组件的摆放位置
root.minsize(500,500)
btn0 = tkinter.Button(root,text = ‘按钮1’)
btn0.pack()
btn1 = tkinter.Button(root,text = ‘按钮1’)
btn1.pack(side = ‘bottom’)
btn2 = tkinter.Button(root,text = ‘按钮2’)
btn2.pack(side = ‘left’)
btn3 = tkinter.Button(root,text = ‘按钮2’)
btn3.pack(side = ‘right’)
root.mainloop()
ipadx,ipady 设置组件的内部间距
btn0 = tkinter.Button(root,text = ‘按钮1’)
设置按钮中文字到边缘的间距
btn0.pack(ipadx = 20,ipady = 20)
padx,pady 设置多个组件外部间距
btn0 = tkinter.Button(root,text = ‘按钮1’)
padx设置组件外部左右间距,pady设置组件外部上下间距
btn0.pack(padx = 20,pady = 20)
fill 设置按钮站一行或者一列
btn1 = tkinter.Button(root,text = ‘屠龙宝刀点击就送!’)# 该组件站水平方向的最大位置btn.pack(fill = ‘x’)btn2 = tkinter.Button(root,text = ‘屠龙宝刀点击就送!’)# 该组件站垂直方向的最大位置,但必须是side = 'right’或’left’才会生效btn2.pack(fill = ‘y’,side = ‘right’)
expand 设置side是否失效
btn1 = tkinter.Button(root,text = ‘屠龙宝刀点击就送!’)
注意:仅仅使用pack无法实现表格方式,必须借助Franme组件才可以实现,非常复杂。
grid()方式:
row 设置行数 默认为0
column 设置列数 默认为0
btn1 = tkinter.Button(root,text = ‘按钮1’)
btn1.grid()
btn2 = tkinter.Button(root,text = ‘按钮2’)
btn2.grid(row = 1,column = 1)# 设置按钮位置
btn3 = tkinter.Button(root,text = ‘按钮3’)
btn3.grid(row = 0,column = 1)
rowspan 设置跨行数量
cloumnspan 设置跨列数量
ipadx,ipady 设置组件内部间距
btn1 = tkinter.Button(root,text = ‘按钮1’)
btn1.grid()
btn2 = tkinter.Button(root,text = ‘按钮2’)
btn2.grid(row = 1,column = 0)# 设置按钮位置
btn2 = tkinter.Button(root,text = ‘按钮2’)
btn2.grid(row = 0,column = 2,rowspan = 2,ipady = 15)
btn2 = tkinter.Button(root,text = ‘按钮2’)
btn2.grid(row = 2,column = 0,columnspan = 3,ipadx = 20)
place()方式:
绝对定位布局:
x 设置距离左上角的水平长度 单位都是像素
y 设置距离左上角的垂直高度 单位都是像素
width 设置组件所占据的宽度 单位都是像素
height 设置组件所占据的高度 单位都是像素
btn = tkinter.Button(root,text = ‘按钮’)
btn.place(x = 100,y = 20)
btn1 = tkinter.Button(root,text = ‘按钮1’)
设置按钮的宽度和高度
btn1.place(x = 100,y = 100,width = 100,height = 100)
相对定位布局:
relx 设置距离左上角的水平长度 取值(0-1)
rely 设置距离左上角的垂直高度 取值(0-1)
relwidth 设置组件所占据的宽度 取值(0-1)
relheight 设置组件所占据的高度 取值(0-1)
以上属性设置都是相对于界面宽度或者高度的百分比,可以更具界面的大小的改变而改变~!
!!!禁止同时使用两种摆放方式
以上内容转自-----
原文链接:https://blog.csdn.net/weixin_39895995/article/details/111443568
二.打开文件夹、文件选择界面框
def wenjianjia_jiazai(xxx): # xxx 可以配合按钮传入参数 ,与三对应
root = tk.Tk()
root.withdraw() #打开选择文件夹对话框
path0=filedialog.askdirectory()
xxx.delete(0,‘end’) #清空xxx,与三对应就是文本框E1
xxx.insert(‘end’,path0) #将打开的文件夹路径以str形式传入E1,指针在末尾end(必须指定位置,但此时清空了位置在哪无所谓)
print(xxx.get())
def wenjian_jiazai(xxx):
root = tk.Tk()
root.withdraw() #打开选择文件夹对话框
path2=filedialog.askopenfilename()
xxx.delete(0,‘end’)
xxx.insert(‘end’,path2)
print(xxx.get())
打开指定.pdf后缀文件,要在 (“pdf files”, “.pdf") 后面加个英文的逗号(不知道作为分隔符还是结束标志)
inputPath=askopenfilename(title=“Select PDF file”, filetypes=((“pdf files”, ".pdf”),))
def wenjian_jiazai_s(xxx,stay):
root = tk.Tk()
root.withdraw() #打开选择文件夹对话框
path2=filedialog.askopenfilename(filetypes=((“files”,stay),))
xxx.delete(0,‘end’)
xxx.insert(‘end’,path2)
print(xxx.get())
三.button调用一个可以传参的函数
E1=tk.Entry(C1,show=None)
E1.place(x = 600,y = 60,width = 230,height = 30)
BB1=E1
#B1=tk.Button(C1,text=“选择结果保存路径”,command=wenjianjia_jiazai()) #不带参调用,此时wenjianjia_jiazai()函数需要把xxx换成指定文本框
B1=tk.Button(C1,text=“选择结果保存路径”,command=lambda:wenjianjia_jiazai(BB1))
#st=’*.wav’ #调用wenjian_jiazai_s函数打开(只能打开)wav文件
#B1=tk.Button(C1,text=“选择结果保存路径”,command=lambda:wenjianjia_jiazai_s(BB1,st))
B1.place(x = 830,y = 60,width = 120,height = 30)
E2=tk.Entry(C1,show=None)
E2.place(x = 210,y = 10,width = 230,height = 30)
BB2=E2
B2=tk.Button(C1,text="vdse_cmd.exe的路径",command=lambda:wenjian_jiazai(BB2))
B2.place(x = 440,y = 10,width = 120,height = 30)
button没有disable功能,所以要置灰可以再调用函数时新建一个button覆盖,函数执行完再删掉这个按钮,对于处理耗时的函数可以使用多线程,多线程的参数传递要注意最后多一个,例如:
t1=threading.Thread(target=函数名,args=(参数1,参数2,))
四.文本框Entry,Text内容获取
Entry.get() Entry可以直接使用get()函数当内容为空时读出的就是 “ ”
Text.get(“0.0”,“end-1c”) Text使用get()函数必须加参数
第一部分,“1.0”意味着输入应该从第一行零字符读取。
end-1c分为两部分:
end结束:读到课文结束。
1c:从结尾开始删除1个字符。
如果不加 -1c 当text是空白时会读取一个 \n 导致报如下错误:
TypeError: get() missing 1 required positional argument: 'index1’
它删除最后一个字符以删除最后一个字符,\n这样您的电子邮件就不会以额外的一行结束。
五.设置多页面就使用Canvas画布
用按钮调用函数,函数内先加Canvas控件,再将按钮、文本框等加入画布内(注意将有些变量设为全局变量,比如文本框,因为会在其他函数内使用文本框对象获取内容)
def b_c1():
global A1,E0,E1,E2,ACDB1
C1 = Canvas(t)
C1.place(x = 10,y = 30,width = 980,height = 460)
L0=tk.Label(C1, text=‘xxxxxxxxx’, font=(‘Arial’, 12))
L0.place(x = 20,y = 10,width = 130,height = 30)
六.调用cmd执行命令,一般用于调用exe
def cmd_run(mingling, show=True): #打开cmd输入“cmd命令字符串”回车执行返回值out_text
try:
out_text = subprocess.check_output(mingling, stderr=subprocess.STDOUT)
return out_text
except subprocess.CalledProcessError as e:
print("Exception while run_exe return code {} ".format(e.returncode))
out_text = str(e.stderr) + str(e.stdout)
print(out_text)
raise