用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, 上面应该就是你要的答案了。 以后都可以用这个方法来找参数了。