如何制作带有包装的L形布局?

时间:2018-01-22 03:59:59

标签: python tkinter tk

我有:

    $number = 430;

    $array = Array 
     [0] => Array 
        ( 
            [value] => 405 
            [information] => some information1
        ) 
     [1] => Array 
        ( 
            [value] => 500
            [information] => some information2
        ) 
     [2] => Array 
        ( 
            [value] => 700
            [information] => some information3

         ) 

    $firstArray = $array[0];
    $secondArray = $array[1];
    $threeArray = $array[2];



function selectValueFromArrayRange ($number, $start, $end, $value, $infomation) 
{
    $startValue = $start[$value];
    $endValue = $end[$value];

    if ( in_array($number, range($startValue, $endValue)) ) {
        return $end[$infomation];
    }
}


selectValueFromArrayRange($number, $firstArray, $secondValue, 'value', 'infomation')

使用try: # In order to be able to import tkinter for import tkinter as tk # either in python 2 or in python 3 except ImportError: import Tkinter as tk if __name__ == '__main__': root = tk.Tk() rgb = {'red', 'green', 'blue'} frames = dict() for color in rgb: frames[color] = tk.Frame(root, height=64, width=64, bg=color) frames['red'].grid(row=0, column=0) frames['green'].grid(row=1, column=0) frames['blue'].grid(row=1, column=1) root.mainloop() 进行布局。如何仅使用grid而使用而不使用使用其他小部件来设置相同的L形布局?

pack'父母(不一定是顶级)只有3个Frames作为孩子。理想情况下,布局应该可以调整大小。

3 个答案:

答案 0 :(得分:2)

在这种特定情况下,如果您希望每个帧占据屏幕的1/4并在窗口调整大小时展开,pack根本无法执行此操作。在调整窗口大小时,无法使用pack并且没有额外的帧可以让左上角的小部件占据屏幕的1/4。

Tkinter同时拥有packgrid,因为它们解决了两种不同类型的布局问题。如果他们能够轻松解决所有相同的问题,就不需要同时解决这些问题。

答案 1 :(得分:0)

无法完成。下面的演示显示了每个side选项可能的所有形状:

import tkinter as tk


class ParentFrame(tk.Frame):
    def __init__(self, master):
        tk.Frame.__init__(self, master)

        self._colors = ('red', 'green', 'blue')
        self._c_len = len(self._colors)
        self.labels = dict()
        self._i = 0
        self._create_widgets()
        self.side_combinations()


    def _create_widgets(self):
        for _color in self._colors:
            self.labels[_color] = tk.Label(self, height=16, width=16,
                                                fg='white', bg=_color)


    def side_combinations(self):
        _side_opts = ('top', 'bottom', 'left', 'right')
        _o_len = len(_side_opts)
        if self._i < (_o_len**3):
            _cur_opt = dict()
            _cur_opt['red'] = _side_opts[self._i//(_o_len**2)]
            _cur_opt['green'] = _side_opts[(self._i//_o_len) % _o_len]
            _cur_opt['blue'] = _side_opts[self._i%_o_len]

            for _clr in self._colors:
                self.labels[_clr].pack(side=_cur_opt[_clr])
                self.labels[_clr]['text'] = _cur_opt[_clr]

            self._i += 1
            self.after(250, self.side_combinations)
        else:
            self._i = 0


if __name__ == '__main__':
    root = tk.Tk()

    test = ParentFrame(root)
    test.pack(fill='both', expand=True)

    root.mainloop()

答案 2 :(得分:0)

frames['red'].pack(anchor=tk.W)
frames['green'].pack(side=tk.LEFT)
frames['blue'].pack()

但你为什么要这样做?使用框架可以更容易地将框架用于整齐的行或列,然后将它们打包成更复杂的结构。