Python中怎么設(shè)置Tkinter窗口

Python 中怎么設(shè)置Tkinter 窗口,相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。

成都創(chuàng)新互聯(lián)公司主營(yíng)彌渡網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,手機(jī)APP定制開(kāi)發(fā),彌渡h5微信小程序開(kāi)發(fā)搭建,彌渡網(wǎng)站營(yíng)銷(xiāo)推廣歡迎彌渡等地區(qū)企業(yè)咨詢(xún)

什么是布局管理器?說(shuō)白了就是管理你的那些組件如何排列的家伙。Tkinter有三個(gè)布局管理器,分別是pack、grid和place,其中:

pack是按添加順序排列組件。

grid是按行/列形式排列組件。

place允許程序員指定組件的大小和位置。

pack

pack其實(shí)之前的例子一直在用,對(duì)比grid管理器,pack更適用于少量組件的排列,但它在使用上更加簡(jiǎn)單。如果需要?jiǎng)?chuàng)建相對(duì)復(fù)雜的布局結(jié)構(gòu),那么建議是使用多個(gè)框架(Frame)結(jié)構(gòu),或者使用grid管理器實(shí)現(xiàn)。

不要在同一個(gè)父組件中混合使用pack和grid,因?yàn)門(mén)kinter會(huì)很認(rèn)真地在那兒計(jì)算到底先使用哪個(gè)布局管理器……以至于你等了半個(gè)小時(shí),Tkinter還在那兒糾結(jié)不出結(jié)果!

我們常常會(huì)遇到的一個(gè)情況是將一個(gè)組件放到一個(gè)容器組件中,并填充整個(gè)父組件。下面生成一個(gè)Listbox組件并將它填充到root窗口中:

import tkinter as tk 
root = tk.Tk() 
listbox = tk.Listbox(root) 
listbox.pack(fill=tk.BOTH, expand=True) 
for i in range(10): 
  listbox.insert(tk.END, str(i)) 

root.mainloop()

 

其中,fill選項(xiàng)是告訴窗口管理器該組件將填充整個(gè)分配給它的空間,BOTH表示同時(shí)橫向和縱向擴(kuò)展,X表示橫向,Y表示縱向;expand選項(xiàng)是告訴窗口管理器將父組件的額外空間也填滿(mǎn)。

默認(rèn)情況下,pack是將添加的組件依次縱向排列:

import tkinter as tk
root = tk.Tk() 
tk.Label(root,text="Red",bg="red",fg="white").pack(fill=tk.X) 
tk.Label(root,text="Green",bg="green",fg="black").pack(fill=tk.X) 
tk.Label(root,text="Blue",bg="blue",fg="white").pack(fill=tk.X) 
tk.mainloop()

Python 中怎么設(shè)置Tkinter 窗口

如果想要組件橫向挨個(gè)兒排列,可以使用side選項(xiàng):

import tkinter as tk 

root = tk.Tk() 

tk.Label(root,text="Red",bg="red",fg="white").pack(side=tk.LEFT) 
tk.Label(root,text="Green",bg="green",fg="black").pack(side=tk.LEFT) 
tk.Label(root,text="Blue",bg="blue",fg="white").pack(side=tk.LEFT) 
tk.mainloop()

GUI Tkinter的三個(gè)布局管理器,叫你如何設(shè)置窗口功能

grid

grid管理器可以說(shuō)是Tkinter這三個(gè)布局管理器中最靈活多變的。當(dāng)你在設(shè)計(jì)對(duì)話(huà)框的時(shí)候,使用gird尤其便捷。如果你此前一直在用pack構(gòu)造窗口布局,那么學(xué)習(xí)完grid你會(huì)悔恨當(dāng)初為啥不早學(xué)它。使用一個(gè)grid就可以簡(jiǎn)單地實(shí)現(xiàn)你用很多個(gè)框架和pack搭建起來(lái)的效果。

使用grid排列組件,只需告訴它你想要將組件放置的位置(行/列,row選項(xiàng)指定行,cloumn選項(xiàng)指定列)。此外,你并不用提前指出網(wǎng)格(grid分布給組件的位置稱(chēng)為網(wǎng)格)的尺寸,因?yàn)楣芾砥鲿?huì)自動(dòng)計(jì)算

import tkinter as tk
root = tk.Tk() 
# column默認(rèn)值是0 
tk.Entry(root).grid(row=0, column=0)
tk.Entry(root).grid(row=0, column=1)
tk.Entry(root).grid(row=0, column=3)
tk.Entry(root).grid(row=1, column=0) 
# tk.Entry(root).grid(row=1, column=1)
tk.Entry(root).grid(row=1, column=3) 
tk.mainloop()

登錄表單

import tkinter as tk
root = tk.Tk() 
root.geometry("300x300+150+150") 
# column默認(rèn)值是0 
tk.Label(root, text="用戶(hù)名").grid(row=0, column=0, sticky=tk.W) 
tk.Entry(root) .grid(row=0, column=1) 
tk.Label(root, text="密碼") .grid(row=1, column=0, sticky=tk.W) 
tk.Entry(root, show="*") .grid(row=1, column=1) 
tk.mainloop()

Python 中怎么設(shè)置Tkinter 窗口

默認(rèn)情況下組件會(huì)居中顯示在對(duì)應(yīng)的網(wǎng)格里,你可以使用sticky選項(xiàng)來(lái)修改這一特性。該選項(xiàng)可以使用的值有E、W、S、N(EWSN分別表示東西南北,即上北下南左西右東)以及它們的組合。因此,可以通過(guò)sticky=W使得Label左對(duì)齊:

tk.Label(root, text="密碼") .grid(row=1, column=0, sticky=tk.W)
tk.Entry(root, show="*") .grid(row=1, column=1)

GUI Tkinter的三個(gè)布局管理器,叫你如何設(shè)置窗口功能

有時(shí)候可能需要用幾個(gè)網(wǎng)格來(lái)放置一個(gè)組件,可以做到嗎?當(dāng)然可以,只需要指定rowspan和columnspan就可以實(shí)現(xiàn)跨行和跨列的功能:

跨行和跨列布局

import tkinter as tk
root = tk.Tk() 
# column默認(rèn)值是0 
tk.Label(root, text="用戶(hù)名").grid(row=0,column=0,sticky=tk.W) 
tk.Entry(root) .grid(row=0, column=1) 
tk.Label(root, text="密碼") .grid(row=1, column=0, sticky=tk.W) 
tk.Entry(root, show="*") .grid(row=1, column=1) 
photo = tk.PhotoImage(file="../../../assets/logo.png") 
tk.Label(root,image=photo).grid(row=0,column=2,rowspan=2, padx=5, pady=5) 
tk.Button(text="提交",width=10).grid(row=2,column=0,columnspan=3, pady=5) 
tk.mainloop()

Python 中怎么設(shè)置Tkinter 窗口

place

通常情況下不建議使用place布局管理器,因?yàn)閷?duì)比起pack和grid,place要做更多的工作。不過(guò)純?cè)诩春侠?,place在一些特殊的情況下可以發(fā)揮妙用。請(qǐng)看下面的例子。

使用place,可以將子組件顯示在父組件的正中間:

import tkinter as tk
root = tk.Tk() 
def callback(): 
  print("正中靶心") 

tk.Button(root, text="點(diǎn)我",command=callback).place(relx=0.5, rely=0.5, anchor=tk.CENTER) 
tk.mainloop

GUI Tkinter的三個(gè)布局管理器,叫你如何設(shè)置窗口功能

在某種情況下,或許你希望一個(gè)組件可以覆蓋另一個(gè)組件,那么place又可以派上用場(chǎng)了。下面例子演示用Button覆蓋Label組件:

import tkinter as tk 
root = tk.Tk() 
def callback(): 
  print("正中靶心") 
photo = tk.PhotoImage(file="../../assets/logo.png") 
tk.Label(root, image=photo).pack() 
tk.Button(root, text="點(diǎn)我",command=callback).place(relx=0.5, rely=0.5, anchor=tk.CENTER) 
tk.mainloop()

Python 中怎么設(shè)置Tkinter 窗口

利用 place 覆蓋組件

不難看出,relx和rely選項(xiàng)指定的是相對(duì)于父組件的位置,范圍是00~1.0,因此0.5表示位于正中間。那么relwidth和relheight選項(xiàng)則是指定相對(duì)于父組件的尺寸:

 

相對(duì)位置和相對(duì)尺寸

import tkinter as tk 

root = tk.Tk() 
tk.Label(root, bg="red").place(relx=0.5, rely=0.5, relheight=0.75, relwidth=0.75, anchor=tk.CENTER) 
tk.Label(root, bg="yellow").place(relx=0.5, rely=0.5, relheight=0.5, relwidth=0.5, anchor=tk.CENTER) 
tk.Label(root, bg="green").place(relx=0.5, rely=0.5, relheight=0.25, relwidth=0.25, anchor=tk.CENTER) 
tk.mainloop()

看完上述內(nèi)容,你們掌握Python 中怎么設(shè)置Tkinter 窗口的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!

當(dāng)前名稱(chēng):Python中怎么設(shè)置Tkinter窗口
網(wǎng)站網(wǎng)址:http://bm7419.com/article4/igicie.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航、面包屑導(dǎo)航、App開(kāi)發(fā)、網(wǎng)站營(yíng)銷(xiāo)、商城網(wǎng)站網(wǎng)站排名

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)