嗨,我無法解決這個問題,我在 1920x1080 解析度的顯示幕上創建了一個程式,當我在另一臺解析度為 1366x768 的電腦上故意運行它時,標簽的位置不同,我選擇了應該是 768 的高度case 和 1080 在另一種情況下:
larghezza = window.winfo_screenheight()
并用于包裝放置:
bottone_reset.pack(side=BOTTOM,anchor=S,pady=(0,altezza*0.1))
bottone_premi.pack(side=BOTTOM,anchor=S,pady=(0,altezza*0.2))
etichetta_click.pack(side=BOTTOM,anchor=S,pady=(0,altezza*0.1))
etichetta_titolo.pack(side=BOTTOM,anchor=S,pady=(0,altezza*0.1))
因為這樣公式會根據當前的顯示幕解析度而變化,但標簽仍然處于不同的位置,如何處理?謝謝
uj5u.com熱心網友回復:
因此,問題在于按鈕和標簽的位置會根據視窗大小而變化。您正在嘗試根據視窗大小手動修改定位。雖然很巧妙,但它顯然沒有按您的意愿作業。但是,除了 pack() 之外,還有不同的選項。它們是grid()和place()。(鏈接到“geeksforgeeks”網站,這是我目前用作參考的網站。)
' grid() ' 使用列和行將元素放置在網格中,最適合用于具有相同尺寸的元素(至少在放置它們的方向上,所以如果你希望它們都在 X 方向上對齊,它們應該具有相似的長度,以免看起來很奇怪)。
bottone_reset.grid(column = 0, row = 0, padx = 5, pady = 5)
bottone_premi.grid(column = 1, row = 0, padx = 5, pady = 5)
etichetta_click.grid(column = 2, row = 0, padx = 5, pady = 5)
etichetta_titolo.grid(column = 3, row = 0, padx = 5, pady = 5)
' place() ' 讓您確定某物的顯式位置,這可能很有用,但如果您選擇元素放置可能無濟于事,因為如果視窗縮短,place 不會改變位置。
我建議為列出的元素創建一個框架,然后根據對您最有用的內容,使用 pack() 或 grid() 將元素放置在該框架內。反過來,將該框架放置在您希望按鈕結束的位置。
frame.pack(side=BOTTOM, anchor = S)
bottone_reset = Button(frame,text = "reset")
bottone_premi = Button(frame, text = "premi")
etichetta_click = Label(frame, text = "click")
etichetta_titolo = Label(frame, text = "Title")
Ofc,您對按鈕和標簽的定義看起來會有所不同,這些只是占位符。
以下代碼將始終將按鈕放置在視窗的底部中心,無論螢屏大小如何(除非總元素不再適合)。它最接近我所看到的你試圖嘗試的東西。當然,您必須用螢屏尺寸檢測替換我手動輸入的視窗寬度和高度。我不能立即讓它與 tkinter 一起作業,所以我決定手動更改值。
from tkinter import *
window = Tk()
window.title("Pack Problem")
windowWidth = 1000
windowHeight = 768
windowSize = str(windowWidth) "x" str(windowHeight)
window.geometry(windowSize)
frame = Frame()
frame.pack(side=BOTTOM, anchor = S)
bottone_reset = Button(frame,text = "reset")
bottone_premi = Button(frame, text = "premi")
etichetta_click = Label(frame, text = "click")
etichetta_titolo = Label(frame, text = "Title")
bottone_reset.grid(column = 0, row = 0, padx = 5, pady = 5)
bottone_premi.grid(column = 1, row = 0, padx = 5, pady = 5)
etichetta_click.grid(column = 2, row = 0, padx = 5, pady = 5)
etichetta_titolo.grid(column = 3, row = 0, padx = 5, pady = 5)
window.mainloop()
布局和化妝顯然只是占位符,但這應該作為您想要做的事情的框架。
編輯:隨著對問題的更好理解,不同的方法。為那些可以使用它的人留下原始評論。
為了根據解析度更改填充大小,我能想到的最快方法是將調整大小函式系結到視窗配置。
window.bind('<Configure>', function)
可悲的是,迄今為止,試圖使其順利調整的嘗試尚未成功。如果您愿意,我會留給您嘗試。我已經開始作業的解決方案是:
def padsize(e):
if e.height <= 1080 and e.height > 768:
bottone_reset.grid(column=0, row=0, padx=25, pady=25)
bottone_premi.grid(column=1, row=0, padx=25, pady=25)
etichetta_click.grid(column=2, row=0, padx=25, pady=25)
etichetta_titolo.grid(column=3, row=0, padx=25, pady=25)
#print("window height is larger than 768")
elif e.height <768 and e.height > 640:
bottone_reset.grid(column=0, row=0, padx=15, pady=15)
bottone_premi.grid(column=1, row=0, padx=15, pady=15)
etichetta_click.grid(column=2, row=0, padx=15, pady=15)
etichetta_titolo.grid(column=3, row=0, padx=15, pady=15)
#print("window height is larger than 768")
elif e.height <640 and e.height > 250:
bottone_reset.grid(column=0, row=0, padx=5, pady=5)
bottone_premi.grid(column=1, row=0, padx=5, pady=5)
etichetta_click.grid(column=2, row=0, padx=5, pady=5)
etichetta_titolo.grid(column=3, row=0, padx=5, pady=5)
#print("window height is smaller than 768")
window.bind('<Configure>', padsize)
如您所見,我使焊盤尺寸差異非常大,以便能夠看到變化而不是需要尺子來檢查。在較小的尺寸差異下,它應該不那么明顯。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/474323.html
