Не понимаю grid () в Tkinter - PullRequest
       6

Не понимаю grid () в Tkinter

0 голосов
/ 13 марта 2019

Я знаю, что это немного широкий вопрос.Я только начинаю с 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()

Что мне удалось получить после нескольких часов возни с сеткой и поиском в Google: Снимок экрана

Что я пытаюсь получить: Screenshot2

Я просто не могу сделать промежуток между виджетами по горизонтали.Я знаю, что спрашиваю много, но если бы кто-то мог немного объяснить грид вместо того, чтобы просто публиковать ответ, я был бы очень благодарен, так как я прочитал много информации об этом в Интернете и, похоже, не могу получитьСуть этого вообще.

1 Ответ

0 голосов
/ 14 марта 2019

Вы создаете виджеты в качестве рабов для 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()

Это лучше объясняет?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...