Python中的widget, buttons, label位置

Python012

Python中的widget, buttons, label位置,第1张

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

mainloop()之后,没有事件的话,窗口是不会刷新的。

试试这样:

from Tkinter import *

root = Tk()

for i in range(1, 101):

val = str(i)

Label(root, textvariable = val).pack()

root.update_idletasks()

找不到资料,通常是看源代码的。 好在python的源代码有时候比帮助,或者是在网上找的东西更好用。 另外有一个国外写的书。 tkinter编程,有机会可以下载一本看看,基本上你要的问题都有答案。

下面简单说一下看源代码的事情。

在python2.7的lib/lib-tk目录下有一个ttk.py文件 , 打开可以看到class Lable(Widget)

发现,它初始时调 用了一个通用的Widget类,(强大)

class Widget(Tkinter.Widget):

调用了

Tkinter.Widget.__init__

Tkinter里

class Widget(BaseWidget, Pack, Place, Grid):

其中BaseWidget的setup显示,你可以输入任何参数

参数需要是classtype,和DictionaryType , 它是动态添加的。所以不保证其一定生效

但是如果它不在conf里,就删除

这些参数应该用于,widget本身属性,以及Pack, Place, Grid等类使用

class Misc:

这里面有所有的参数。太长了。如果你有耐心,可以仔细去看看。

如果有兴趣,可以继续追一下tcl/tcl8.5里的代码。其中似乎也有所有的configure

顺便帮你查找了《python与tkiner编程》这本书。在361和362页有所有你要的基本参数。太多了,这里就不列表了。

375页有label特有的选项。包括bgstipple, fgstipple, lmargin1, lmargin2, offset, overstrike, margin, tabs, underline等

标准选项有:backgroud, borderwidth, font, foregroud, justify, relief

你在问题里列的width, height等 应该是属于Pack, Place, Grid用的。

395页有大部分控件共享选项的详细说明。

53页有label的简单使用说明

有这本书,基本上就不用自己看源代码了。作者是1993年就开始使用python的老手。

另外你还可以使用HELP这个方法 。

>>> from Tkinter import *

>>> root=Tk()

>>> label=Label(root,text='xiaodeng')

>>> help(label.config)

Help on method configure in module Tkinter:

configure(self, cnf=None, **kw) method of Tkinter.Label instance

    Configure resources of a widget.

    The values for resources are specified as keyword

    arguments. To get an overview about

    the allowed keyword arguments call the method keys.

根据help的提 示, 你需要检查 它的keys

>>> print label.keys()

['activebackground', 'activeforeground', 'anchor', 'background', 'bd', 'bg', 'bi

tmap', 'borderwidth', 'compound', 'cursor', 'disabledforeground', 'fg', 'font',

'foreground', 'height', 'highlightbackground', 'highlightcolor', 'highlightthick

ness', 'image', 'justify', 'padx', 'pady', 'relief', 'state', 'takefocus', 'text

', 'textvariable', 'underline', 'width', 'wraplength']

OK, 上面应该就是你要的答案了。 以后都可以用这个方法来找参数了。