![](/img/trans.png)
[英]Why does my Tkinter Scrollbar's bar fill entire length of my window?
[英]Why doesn't my tkinter frame fill the entire window
我正在嘗試創建一個問答游戲,但無法將標簽放在正確的位置,我希望“數學類別”位於左上角,但是當我選擇第 0 行和第 0 列時,它會將其放在中間? 幫助................................................. ………………………………………………………………………………………………………………………………………………………… ………………………………………………………………………………………………………………………………………………………………………………
import tkinter
import tkinter as tk
from tkinter.ttk import *
from tkinter import *
score = 0
class SampleApp(tk.Tk):
def __init__(self):
tk.Tk.__init__(self)
self._frame = None
self.switch_frame(MainMenu)
def switch_frame(self, frame_class):
new_frame = frame_class(self)
if self._frame is not None:
self._frame.destroy()
self._frame = new_frame
self._frame.pack()
class MainMenu(tk.Frame):
def __init__(self, master):
#Maths Picture/Button
global photo
tk.Frame.__init__(self, master)
#configure = tk.Frame(self)
#configure.grid_rowconfigure(0, weight=1)
#configure.grid_columnconfigure(0, weight=1)
photo = PhotoImage(file = "MathsPicture.png")
photoimage = photo.subsample(3,3)
lbl = tk.Label(self, text="MainMenu", font=('Verdana', 40, "bold"))
lbl.grid(row=0, column=1)
button = tk.Button(self, image = photo, command=lambda:[master.switch_frame(PageOne), ScoreUpdate()])
button.grid(row=1, column=1)
#tk.Button(self, text="Go to page two",command=lambda:[master.switch_frame(PageTwo), ScoreUpdate()]).pack()
def ScoreUpdate(event=None):
global score
score += 500
class PageOne(tk.Frame):
global score
def __init__(self, master):
tk.Frame.__init__(self, master)
tk.Frame.configure(self,bg='red')
#tk.Frame.configure
tk.Frame.grid_propagate(self)
lbl = tk.Label(self, text="Maths Category", font=("Verdana", 20))
lbl.grid(row=0, column = 0)
lbl = tk.Label(self, text=score , font=("Verdana", 40, "bold"))
lbl.grid(row=1, column=0)
lbl = tk.Label(self, text="Question 1", font=('Helvetica', 18, "bold"))
lbl.grid(row=1, column=3)
btn = tk.Button(self, text="Go back to MainMenu", font=('Helvetica', 20), command=lambda: master.switch_frame(MainMenu))
btn.grid(row=0, column=4)
btn = tk.Button(self, text='Update score', command=ScoreUpdate)
btn.grid(row=3, column=4)
btn = tk.Button(self, text="Go to page two",command=lambda:[master.switch_frame(PageTwo), ScoreUpdate()])
btn.grid(row=4,column=3)
print("Physics Question 1")
class PageTwo(tk.Frame):
def __init__(self, master):
tk.Frame.__init__(self, master)
tk.Frame.configure(self,bg='red')
tk.Label(self, text="Question 2", font=('Helvetica', 18, "bold")).pack(side="top", fill="x", pady=5)
tk.Button(self, text="Go back to start page",command=lambda: master.switch_frame(PageThree)).pack()
tk.Button(self, text='Update score', command=ScoreUpdate)
print("Physics Question 2")
class PageThree(tk.Frame):
def __init__(self, master):
tk.Frame.__init__(self, master)
tk.Frame.configure(self,bg='red')
tk.Label(self, text="Question 3", font=('Helvetica', 18, "bold")).pack(side="top", fill="x", pady=5)
tk.Button(self, text="Go back to start page",command=lambda: master.switch_frame(MainMenu)).pack()
tk.Button(self, text='Update score', command=ScoreUpdate)
print("Physics Question 3")
if __name__ == "__main__":
window = SampleApp()
window.geometry("1200x900")
window.mainloop()
lbl.grid(row=0, column=0)
該將lbl.grid(row=0, column=0)
放在左上角。 在我看來, PageOne
對象好像位於窗口的中心。
嘗試給PageOne
一個背景顏色,看看它有多大以及它的位置。 我的猜測是包含小部件在窗口中居中,或者包含框架(或窗口)配置為展開(使用columnconfigure
)。
更新
PageOne
被打包到根窗口 ( SampleApp
) 中,默認情況下, pack
會將其放置在頂部中間。 您可以通過指定所需位置來更改此設置。
def switch_frame(self, frame_class):
new_frame = frame_class(self)
if self._frame is not None:
self._frame.destroy()
self._frame = new_frame
self._frame.pack(expand=True, anchor='nw') # New pack details
通過將分配給小部件的空間設置為expand
,它將嘗試獲得盡可能多的空間,然后我將小部件放置在右上角的anchor='nw'
(如在西北)。
但這會將所有幀放在左上角。 如果您只想在PageOne
小部件中使用此功能,您可以在那里調整包裝詳細信息。
class PageOne(tk.Frame):
global score
def __init__(self, master):
tk.Frame.__init__(self, master)
tk.Frame.configure(self,bg='red')
self.pack(expand=True, anchor='nw') # New pack details
# etc, etc.
默認情況下,小部件在分配給它的空間中居中。 如果您希望小部件粘在空間的頂部而不是中間,請使用sticky
屬性。
例如,以下將強制標簽位於分配給它的單元格的左上(西北)角。
lbl.grid(row=0, column = 0, sticky="nw")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.