def create_layout(frame):
frame = Frame(frame, bg = 'red')
frame.pack(side = LEFT, fill=BOTH)
b = Button(frame, text='Button1', command=pressed, padx = 20)
b.pack(pady = 20, padx = 20)
c = Button(frame, text='Button2', command=pressed, padx=20)
c.pack(pady = 20, padx = 20)
到目前为止我得到了这个代码,假设已经调用了Tkinter import *并且框架已经有了它的大小和颜色设置。它应该如下图所示。但是我无法将按钮3和4放到右边的框架上,每当我添加一个按钮时,它就会进入红框。
答案 0 :(得分:1)
您需要添加另一个位于右侧的框架,然后将button3和button4打包到其中。也许将你在那里的前一帧改为frame1然后有:
frame2 = Frame(frame, bg = "yellow")
frame2.pack(side = RIGHT, fill = BOTH)
然后,创建按钮并将其打包。希望这会有所帮助!
答案 1 :(得分:1)
好的,第一组按钮,按钮1和按钮1 2位于"框架",按钮3&应该省略4。
所以使用按钮1和按钮1 2,用bg红色打开框架,用side = tk.LEFT打包,用两者填充&扩展它。
按钮3& 4,只需将它们左侧并展开即可。这将像一种享受一样; - )
答案 2 :(得分:0)
您有2帧和4个按钮。
让我们创建一个名为create_widgets()
的函数,该函数仅包含调用另外两个函数create_frames()
和create_buttons()
对于框架,我们使用grid()
布局管理器:
def create_frames(self):
self.left_frame = tk.Frame(width=140, height=140, background='red')
self.left_frame.grid(row=0, column=0)
self.right_frame = tk.Frame(width=300, height=140, background='gold2')
self.right_frame.grid(row=0, column=1)
这将创建此界面:
让我们设计create_buttons()
的方式仅在于调用两个不同的函数,每个函数都有一个特定的任务:
create_left_frame_buttons()
为左侧框架创建按钮create_right_frame_buttons()
为右边框创建按钮这是他们的简单实现:
def create_buttons(self):
self.create_left_frame_buttons()
self.create_right_frame_buttons()
def create_left_frame_buttons(self):
self.button1 = tk.Button(self.left_frame, text='Button1')
self.button1.grid(row=0, column=0, padx=30, pady=20)
self.button2 = tk.Button(self.left_frame, text='Button2')
self.button2.grid(row=1, column=0, padx=30, pady=20)
def create_right_frame_buttons(self):
self.button1 = tk.Button(self.right_frame, text='Button3')
self.button1.grid(row=0, column=0, padx=20, pady=50)
self.button2 = tk.Button(self.right_frame, text='Button4')
self.button2.grid(row=0, column=1, padx=70)
请注意,我使用选项padx
和pady
在按钮之间创建了合适的间距。
到目前为止,这是生成的界面:
您可以看到左右框架都在缩小,结果很难看。要解决此问题,我们可以为每个帧设置rid_propagate(0)
。
因此,基于这些观察并遵循Tkinter best practices,下面是完整的代码:
import tkinter as tk
class MainApplication(tk.Frame):
def __init__(self, master):
self.master = master
tk.Frame.__init__(self, self.master)
self.configure_gui()
self.create_widgets()
def configure_gui(self):
self.master.title('Simple layout')
self.master.geometry('440x140')
self.master.resizable(0, 0)
def create_widgets(self):
self.create_frames()
self.create_buttons()
def create_frames(self):
self.left_frame = tk.Frame(width=140, height=140, background='red')
self.left_frame.grid_propagate(0)
self.left_frame.grid(row=0, column=0)
self.right_frame = tk.Frame(width=300, height=140, background='gold2')
self.right_frame.grid_propagate(0)
self.right_frame.grid(row=0, column=1)
def create_buttons(self):
self.create_left_frame_buttons()
self.create_right_frame_buttons()
def create_left_frame_buttons(self):
self.button1 = tk.Button(self.left_frame, text='Button1')
self.button1.grid(row=0, column=0, padx=30, pady=20)
self.button2 = tk.Button(self.left_frame, text='Button2')
self.button2.grid(row=1, column=0, padx=30, pady=20)
def create_right_frame_buttons(self):
self.button1 = tk.Button(self.right_frame, text='Button3')
self.button1.grid(row=0, column=0, padx=20, pady=50)
self.button2 = tk.Button(self.right_frame, text='Button4')
self.button2.grid(row=0, column=1, padx=70)
if __name__ == '__main__':
root = tk.Tk()
main_app = MainApplication(root)
root.mainloop()
演示: