簡體   English   中英

不了解Tkinter中的grid()

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM