Как я могу сложить несколько кадров в Tkinter - PullRequest
0 голосов
/ 23 марта 2019

Для моего проекта мне нужно создать графический интерфейс с использованием Tkinter. Я хотел разделить его на 4 разных кадра, каждый с разными цветами фона. Однако, когда я это делаю, отображается только фоновый цвет первого кадра. Я приложил свой код ниже, а также снимок экрана с выводом, который я получаю.

My Tkinter GUI

from Tkinter import *
import tkMessageBox

root = Tk()
root.geometry("950x800")
root.configure(background="black")

def test():
   print("this is a test")

# *****Frames*****

fileFrame = Frame(root)
fileFrame.configure(background="yellow")
fileFrame.pack()
attributeFrame = Frame(root)
attributeFrame.configure(background="red")
attributeFrame.pack()
constraintFrame = Frame(root)
constraintFrame.configure(background="purple")
constraintFrame.pack()
preferenceFrame = Frame(root)
preferenceFrame.configure(background="blue")
preferenceFrame.pack()

# *****File Frame*****

label_1 = Label(fileFrame, text="Enter Attributes file name:", anchor="e",                 
bg="red", font="Times 25", width=25, height=1)
label_2 = Label(fileFrame, text="Enter hard constraints file name:",     
anchor="e", bg="blue", fg="yellow", font="Times 25", width=25, height=1)
label_3 = Label(fileFrame, text="Enter preferences file name:", 
anchor="e", bg="purple", fg="green", font="times 25", width=25, height=1)
entry_1 = Entry(fileFrame, font="Times 25")
entry_2 = Entry(fileFrame, font="Times 25")
entry_3 = Entry(fileFrame, font="Times 25")
button_1 = Button(fileFrame, text="Submit", bg="red", font="Times 20")
button_2 = Button(fileFrame, text="Submit", bg="blue", fg="yellow", 
font="Times 20")
button_3 = Button(fileFrame, text="Submit", bg="purple", fg="green", 
font="Times 20")
label_1.grid(row=0, padx=5, pady=5)
entry_1.grid(row=0, column=1)
button_1.grid(row=0, column=2, padx=5, pady=5)
label_2.grid(row=1, padx=5, pady=5)
entry_2.grid(row=1, column=1)
button_2.grid(row=1, column=2, padx=5, pady=5)
label_3.grid(row=2, padx=5, pady=5)
entry_3.grid(row=2, column=1)
button_3.grid(row=2, column=2, padx=5, pady=5)

# *****Attribute Frame*****

label_Attribute_header = Label(attributeFrame, text="Attributes:", 
bg="red", font="Times 25", width=25, height=1)
label_Attribute_header.pack()

# *****Constraint Frame*****

label_Constraint_header = Label(constraintFrame, text="Hard Constraints:", 
bg="purple", fg="green", font="Times 25", width=25, height=1)
label_Constraint_header.pack()

# *****Preference Frame*****

label_Preference_header = Label(preferenceFrame, text="Preferences:", 
bg="blue", fg="yellow", font="Times 25", width=25, height=1)
label_Preference_header.pack()

root.mainloop()

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

1 Ответ

1 голос
/ 23 марта 2019

Ваши кадры есть.В нижних трех кадрах меньше вещей, и вы не дали им отступов.Рамка сжимается, чтобы уместиться, поэтому, когда у вас есть только один элемент, рамки не будут видны.

Рамки можно легко увидеть, если вы выполните одно из двух действий:

Сначала,Вы можете запросить, чтобы кадры заполняли родительское окно в направлении х.Когда вы сделаете это, вы увидите их:

fileFrame.pack(fill="x")
attributeFrame.pack(fill="x")
constraintFrame.pack(fill="x")
preferenceFrame.pack(fill="x")

Во-вторых, вместо или в дополнение к этому, вы можете дать отступ вокруг меток в нижних фреймах.Это позволит цветам рамки появляться.

label_Attribute_header.pack(padx=20, pady=20)
...
label_Constraint_header.pack(padx=20, pady=20)
...
label_Preference_header.pack(padx=20, pady=20)
...