Python中的widget, buttons, label位置

现在我有的显示是这样的:

但我想要的是这样:

而这是我的code:
def __init__(self, master): master.title("testing") self._master = master self.frame = tk.Frame(master) self.frame.pack() menubar=tk.Menu(master) master.config(menu=menubar) filemenu=tk.Menu(menubar) menubar.add_cascade(label='File', menu=filemenu) filemenu.add_command(label='Open', command=self.open_file) self._label=tk.Label(master,text='testing').pack() self._button=tk.Button(master,text='testing',command=self.testing).pack(side=tk.LEFT) self._button=tk.Button(master,text='testing',command=self.testing).pack(side=tk.LEFT) self.list = tk.Listbox(master, bg='white') self.list.insert(1, "testing") self.list.pack(side=tk.LEFT, fill = tk.BOTH) self._canvas = tk.Canvas(master, bg='white') self._canvas.pack(side=tk.RIGHT, fill = tk.BOTH, expand=1)
我应该怎样改??
只能用pack()呢?被限定了

用grid布局,布局示例:

#! /usr/bin/env python
# -*- coding: utf-8 -*-

import Tkinter as tk

class TestUI(object):
    def __init__(self, master):
        self.root = master
        self.create_frame()

    def create_frame(self):
        '''
        create frame,left and right
        '''
        self.frm_left = tk.LabelFrame(self.root)
        self.frm_right = tk.LabelFrame(self.root)

        self.frm_left.grid(row=0, column=0, sticky="wesn")
        self.frm_right.grid(row=0, column=1, sticky="wesn")

        self.create_frm_left()
        self.create_frm_right()

    def create_frm_left(self):
        self.frm_left_label = tk.Label(self.frm_left,
                                       text="Test")
        self.frm_left_listbox = tk.Listbox(self.frm_left)
        self.frm_left_btn = tk.Button(self.frm_left,
                                      text="Test")

        self.frm_left_label.grid(row=0, column=0, padx=5, pady=5, sticky="w")
        self.frm_left_listbox.grid(
            row=1, column=0, padx=5, pady=5, sticky="wesn")
        self.frm_left_btn.grid(row=2, column=0, padx=5, pady=5, sticky="wesn")

        for i in range(5):
            self.frm_left_listbox.insert("end", i)

    def create_frm_right(self):
        self.frm_right_canvas = tk.Canvas(self.frm_right, bg="white")

        self.frm_right_canvas.grid(row=0, column=0, padx=5, pady=5, sticky="wesn")

if __name__ == '__main__':
    '''
    main loop
    '''
    root = tk.Tk()
    root.title("Test")
    TestUI(master=root)
    root.resizable(False, False)
    root.mainloop()

追问

只能用pack()呢?被限定了

温馨提示:答案为网友推荐,仅供参考
相似回答