![](/img/trans.png)
[英]Tkinter : I don't understand how the grid works (trying to create equally sized columns)
[英]Don't understand grid() in Tkinter
我知道這是一個廣泛的問題。 我剛開始使用Python和Tkinter,並且正在構建我的第一個應用程序。 我已經完成了一些小部件,並且還在進行中,但我似乎根本無法按照自己的方式放置它們。 這是我的代碼:
import tkinter
from tkinter import font
import tkinter as tk
import time
from threading import Thread
from PIL import Image, ImageTk
class Window(tk.Frame):
def __init__(self, master=None):
tk.Frame.__init__(self, master)
self.master = master
def update_timeText():
current = time.strftime("%H:%M")
seconds = time.strftime(":%S")
currentDate=time.strftime("%a %e %B, %Y")
timeText1.configure(text=current, fg='white', background='black')
timeText1.grid(row=0,column=0, sticky='NW', padx=15, pady=15)
timeText2.configure(text=seconds, fg='white', background='black')
timeText2.grid(row=0, column=1, pady=17, sticky='NW')
Date.configure(text=currentDate, fg='white', background='black')
Date.grid(row=0, column=0, columnspan=3, sticky='NW', padx=20, pady=124, rowspan=2)
root.after(1000, update_timeText)
def update_Weather():
temperature=int(13)
picture = ImageTk.PhotoImage(picturePNG)
weatherIcon.configure(image=picture, background='black')
weatherIcon.grid(column=5, sticky='ne')
weatherTemperature.configure(text=temperature, fg='white', background='black')
weatherTemperature.grid(column=6, sticky='ne')
root.after(100000, update_Weather)
root = tk.Tk()
root.configure(background='black')
root.title('Smart Mirror')
timeText1 = tk.Label(root, text="", font=("Opinio", 90, "bold"))
timeText2 = tk.Label(root, text="", font=("Opinio", 45, "bold"))
weatherTemperature=tk.Label(root, text="", font=("Roboto Condensed", 80))
weatherIcon=tk.Label(root, image="")
Thread(target=update_Weather).start()
Thread(target=update_timeText).start()
app = Window(root)
root.mainloop()
經過數小時的網格和谷歌搜索,我設法獲得了什么: 屏幕截圖
我想要得到的是: Screenshot2
我只是似乎無法在小部件之間水平放置任何空間。 我知道我要很多,但是如果有人可以解釋一下網格而不是僅僅發布答案,我將非常感激,因為我已經在線閱讀了很多有關它的信息,而且似乎無法獲得它的要點。
您將小部件創建為root
從屬,而不是類Window()
從屬。 這令人困惑,並使類依賴於主程序創建一些小部件,這些小部件將由Window()
對象稍后配置。
網格小部件時分配row
,如@Henry Yik注釋。
這是我將如何放置小部件的示例:
import tkinter as tk
class Window(tk.Frame):
def __init__(self, master=None):
tk.Frame.__init__(self, master)
self.master = master
self.configure(bg='thistle') # To see where self is
self.pack(expand=True, fill='both', padx=10, pady=10)
self.columnconfigure(0, weight=1) # Which column should change
# when window size changes
Date = tk.Label(self, text='19:38:25', fg='white', bg='black',
font='-size 70')
Date.grid(row=0, column=0, columnspan=3, sticky='NW', padx=20, pady=70, rowspan=2)
picture = tk.PhotoImage(file='sun.png')
weatherIcon = tk.Label(self, image=picture, bg='black')
weatherIcon.grid(row=0, column=5, sticky='NE')
weatherIcon.image = picture # Save a reference to the picture
weatherTemperature = tk.Label(self, text='4°C', fg='white', bg='black',
font='-size 70')
weatherTemperature.grid(row=0, column=6, sticky='NE')
root = tk.Tk()
root.configure(background='tan') # To see where root is
root.geometry('900x300')
app = Window(root)
root.mainloop()
這可以解釋得更好嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.