파이썬/tkinter에서 궁극적으로 작은 터치 스크린 디스플레이 (480x320px)가 첨부 된 라즈베리 파이에서 실행해야하는 응용 프로그램을 만들려고합니다. 화면은 메인 프레임과 프레임 (나중에)에 6 개의 기능 키 (버튼)가 포함될 프레임으로 나뉩니다.tkinter 프레임 표시 기본 사항
그래서 아래 코드로 시작 했으므로 어떻게 든 메인 애플리케이션 창을 두 프레임 하나는 회색이고 하나는 검정색입니다. 그러나 (내 PC에서) 보이는 것은 올바른 크기 (크기가 너무 작음)가 아닌 올바른 크기의 메인앱 창과 노란색 배경입니다. MainApp 내부에 정의 된 프레임은 표시되지 않습니다. 라벨이 안에 있더라도 접착 성이 있습니다. 무게가 있습니다. 내가 시도한 것 이외에 다른 것을 기억할 수 없습니다.
나는 무엇을 간과하고 있습니까? 제발요?
#!/usr/bin/python3
import tkinter as tk
#
# main application
#
class MainApp(tk.Frame):
def __init__(self, parent):
tk.Frame.__init__(self, parent)
self.parent = parent
self.parent.title("My first GUI")
self.parent.geometry("480x320")
self.parent.resizable(width=False, height=False)
self.parent.config(bg="yellow")
mainframe = tk.Frame(self, bg="grey", width=480, height=280)
mainframe.grid(column=0, row=0, sticky="WENS")
tk.Label(mainframe, text="co-cooo").grid(column=0, row=0, sticky="WENS")
fkeyframe = tk.Frame(self, bg="black", width=480, height=40)
fkeyframe.grid(column=0, row=1, sticky="WENS")
tk.Label(fkeyframe, text="fo-fooo").grid(column=0, row=0, sticky="WENS")
self.rowconfigure(0, weight=1, minsize=280)
self.rowconfigure(1, weight=1, minsize=40)
#
# define root element and start application
#
def main():
root = tk.Tk()
app = MainApp(root)
root.mainloop()
#
# start if called from command line
#
if __name__ == '__main__':
main()
# 0,0 MainApp (yellow) 480,0
# +---------------------------------+
# | mainframe (grey, h=280) |
# |+-------------------------------+|
# || ||
# || ||
# || ||
# |+-------------------------------+|
# | fkeyframe (black, h=40) |
# |+-------------------------------+|
# ||+----+----+----+----+----+----+||
# ||| Bt | Bt | Bt | Bt | Bt | Bt |||
# ||+----+----+----+----+----+----+||
# |+-------------------------------+|
# +---------------------------------+
# 320,0 320,480
부분 개선 ... 이제는 회색과 검정색으로 표시되어 MainApp 창의 왼쪽에 overlaying labels co-cooo & fo-fooo가 표시되고 나머지는 여전히 노란색으로 표시됩니다 (약 80 %) ...그래서 프레임은 내가 요청한 폭을 존중하지 않는 것처럼 보입니다. – MikeD
업데이트 된 답변, 프레임의'grid_propagate' 메소드보세요. – Fejs
나는 중복 코드라고 생각하는 것을 줄이기 시작했다. 그래서'self.grid()'는 실제로 매우 좋았다. 나는 이제 새로운 현상에 뛰어 들고있다. 그래서 나는 당신의 답을 받아 들여서, 10보다 높은 레벨로 올라간다.^6 – MikeD