Python GUI框架和按钮布局,如何添加框架和按钮来纠正位置?

时间:2013-05-06 06:37:46

标签: python tkinter

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放到右边的框架上,每当我添加一个按钮时,它就会进入红框。

enter image description here

3 个答案:

答案 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打包,用两者填充&am​​p;扩展它。

按钮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) 

这将创建此界面:

enter image description here

让我们设计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)

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

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

enter image description here

您可以看到左右框架都在缩小,结果很难看。要解决此问题,我们可以为每个帧设置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()

演示:

enter image description here

相关问题