Tkinter窗口

應用程序窗口

基本窗口

在我們一直用的那個簡單例子中,屏幕上只有root窗口這一個窗口

當我們調用Tk構造函數後自動生成的,當然對於簡單應用程序來說非常方便

from Tkinter import *

root = Tk()

# create window contents as children to root...

root.mainloop()

如果你想創建額外的窗口,你可以使用Toplevel組件,它可以簡單的創建一個新窗口,

新窗口和root窗口看起來一樣

from Tkinter import *

root = Tk()

# create root window contents...

top = Toplevel()

# create top window contents...

root.mainloop()

你不需要用pack方法顯示Toplevel,因爲window manager會自動的顯示它,

實際上,如果你試圖pack 或者其他幾何管理一個Toplevel組件會報錯。

Menus

Tkinter爲菜單提供了一個特殊的組件類型。爲了創建一個菜單,你要創建一個Menu類的實例

在調用add方法添加入口

  • add_command(label=string, command=callback) #添加普通的菜單項.

  • add_separator()#添加分隔符

  • add_cascade(label=string, menu=menu instance) 添加子菜單(另一個菜單實例)

  • 可以是下拉式的也可以是彈出式的,依賴父菜單。

  • 下面是例子

  • from Tkinter import *

    def callback():
        print "called the callback!"

    root = Tk()

    # create a menu
    menu = Menu(root)
    root.config(menu=menu)

    filemenu = Menu(menu)
    menu.add_cascade(label="File", menu=filemenu)
    filemenu.add_command(label="New", command=callback)
    filemenu.add_command(label="Open...", command=callback)
    filemenu.add_separator()
    filemenu.add_command(label="Exit", command=callback)

    helpmenu = Menu(menu)
    menu.add_cascade(label="Help", menu=helpmenu)
    helpmenu.add_command(label="About...", command=callback)

    mainloop()

在這個例子中,我們首先創建一個Menu實例,然後使用config方法把它附加到root窗口。

該Menu的內容將用於在根窗口的頂部創建菜單欄,你不用pack函數,因爲它是由Tkinter自動顯示的。

接下來,我們創建一個新的菜單實例,使用menu這個實例作爲父窗口,使用add_cascade方法,將其

作爲下拉菜單。然後我們調用add_command向菜單添加命令,這兒用的是同一個回調函數

。add_separator方法在中間加一條橫線。

工具欄

許多應用程序在菜單欄的下面放置了一個工具欄,通常包含許多常用功能的按鈕,比如打開文件、打印等

在下面的例子中,我們使用frame作爲工具欄,並放置一些普通的按鈕。

創建簡單的工具欄

from Tkinter import *

root = Tk()

def callback():
    print "called the callback!"

# create a toolbar
toolbar = Frame(root)

b = Button(toolbar, text="new", width=6, command=callback)
b.pack(side=LEFT, padx=2, pady=2)

b = Button(toolbar, text="open", width=6, command=callback)
b.pack(side=LEFT, padx=2, pady=2)

toolbar.pack(side=TOP, fill=X)

mainloop()

按鈕靠左放,toolbar自己靠着上面放,使用fill選項,設置爲X的意思是如果組件被縮放了,將按照

X軸鋪滿。另外這裏用的是文本形式的按鈕,也可以用圖形形式的。

Status Bars

大多數應用程序的底部有狀態欄。使用Tkinter實現狀態欄很簡單,你可以使用Label組件。以下是代碼

status = Label(master, text="", bd=1, relief=SUNKEN, anchor=W)

status.pack(side=BOTTOM, fill=X)

如果你想更好看些,你可以用下面的類

class StatusBar(Frame):

    def __init__(self, master):
        Frame.__init__(self, master)
        self.label = Label(self, bd=1, relief=SUNKEN, anchor=W)
        self.label.pack(fill=X)

    def set(self, format, *args):
        self.label.config(text=format % args)
        self.label.update_idletasks()

    def clear(self):
        self.label.config(text="")

        self.label.update_idletasks()

這裏的set方法實現類似C語言printf的功能,接受格式化字符串。注意它還調用了

update_idletasks方法,保證可以刷新狀態欄


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章