1
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)

到目前为止,我得到了这段代码,假设已经调用了 from Tkinter import * 并且框架已经设置了它的大小和颜色。它应该如下图所示。但是,我永远无法将按钮 3 和 4 放到右侧的框架中,每当我添加一个按钮时,它就会进入红框。

在此处输入图像描述

4

3 回答 3

2

好的,第一组按钮,按钮1和2在“框架”中,按钮3和4应该被排除在外。

因此,使用按钮 1 和 2,打开背景为红色的框架,使用 side=tk.LEFT 打包,填充两者并展开。

使用按钮 3 和 4,将它们放在左侧并展开。这将像一种享受;-)

于 2016-05-12T09:35:18.087 回答
1

您需要添加另一个位于右侧的框架,然后将 button3 和 button4 打包到其中。也许将您在那里的上一帧更改为 frame1,然后有:

frame2 = Frame(frame, bg = "yellow")
frame2.pack(side = RIGHT, fill = BOTH)

然后,创建按钮并将它们打包。希望这会有所帮助!

于 2013-05-06T12:00:10.370 回答
1

您有 2 个框架和 4 个按钮。

让我们创建一个名为的函数create_widgets(),它只包含调用 2 个其他函数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()一种方式,它只包含调用 2 个不同的函数,每个函数都有一个特定的任务:

  • 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)

请注意,我使用了选项padxpady在按钮之间创建了合适的间距。

到目前为止,这是生成的界面:

在此处输入图像描述

你可以看到左右帧都在缩小,结果很丑。为了解决这个问题,我们可以 rid_propagate(0)为每一帧设置。

因此,基于这些观察并遵循Tkinter 最佳实践,这里是完整的代码:

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()

演示:

在此处输入图像描述

于 2018-07-23T08:32:58.320 回答