Python之Tkinter:動作

nintyuui發表於2021-09-09


 Python之Tkinter:動作

進行介面程式設計,首先少不了以下幾個重要部分:

l  窗體

l  控制元件

l  動作

窗體是容器,各式各樣的控制元件放置在容器中,每種控制元件在觸發之後都會執行一定的指令,即完成它的動作。

         怎樣將控制元件繫結到一個命令上?一般來說在建立控制元件的時候,使用引數command來指定要執行的動作,這個動作可以使以下幾類情況:

l  普通函式

l  同屬於一個類的其他成員函式

l  內建函式

l  lamda函式

怎樣建立視窗?一般來說有這麼幾種方法,一種是過程式的,使用Tk()。還有一種是物件導向式的,即:繼承自Frame. Tk()返回的物件是根容器,Frame產生的物件可以放置在Tk()返回的物件中。

每個視窗在建立之後,使用pack對自己進行佈局,並使自己可見。佈局的方式可以使用expand、fill、side等。

控制元件對事件的繫結呼叫函式bind,第一個引數為表示事件的字串,第二個為要執行的動作,動作的來源前面已經敘述。

下面為一些例子:

 

#!/usr/bin/python 

 

  

 

from Tkinter import * 

 

  

 

def quit(): 

 

         print "I have to leave now ..." 

 

         import sys 

 

         sys.exit() 

 

  

 

b = Button(None,text="quit",bg="red",command=quit) 

 

b.pack() 

 

b.mainloop() 

 

  

建立一個Button,點選後執行的動作為退出。

 

 

#!/usr/bin/python 

 

  

 

from Tkinter import * 

 

  

 

class ClassCall(): 

 

         def __init__(self): 

 

                   self.msg="call from a class.n" 

 

         def __call__(self): 

 

                   print self.msg 

 

                   import sys 

 

                   sys.exit() 

 

  

 

widget = Button(None,text="test",command=ClassCall()) 

 

widget.pack() 

 

widget.mainloop() 

將一個類的例項指定為動作,預設時呼叫該類的__call__方法。

 

 

#!/usr/bin/python 

 

  

 

from Tkinter import * 

 

  

 

class InnerClass(): 

 

         def __init__(self): 

 

                   self.b = Button(None,text="test",command = self.call) 

 

                   self.b.pack() 

 

         def call(self): 

 

                   print "I am leaving now..." 

 

                   import sys 

 

                   sys.exit() 

 

  

 

InnerClass() 

 

mainloop() 

 

  

呼叫同一個類內部的成員函式

 

  

 

#!/usr/bin/python 

 

  

 

from Tkinter import * 

 

  

 

class GuiDesign(): 

 

         def __init__(self,parent=None): 

 

                   self.top = Frame(parent) 

 

                   self.top.pack() 

 

                   self.data = 0 

 

                   self.layout() 

 

                   

 

         def layout(self): 

 

                   Button(self.top,text="exit",command=self.top.quit).pack(side = LEFT) 

 

                   Button(self.top,text="hi",command=self.hi).pack(side = RIGHT) 

 

  

 

         def hi(self): 

 

                   self.data += 1 

 

                   print "hi:%d" % self.data 

 

  

 

frm = Frame() 

 

frm.pack()         #easy to make mistake here. 

 

Label(frm,text="hello").pack(side=TOP) 

 

GuiDesign(frm).top.mainloop() 

 

  

將Frame物件作為引數使用

 

 

#!/usr/bin/python 

 

  

 

from Tkinter import * 

 

     

 

def showPosEvent(event): 

 

    print 'Widget=%s X=%s Y=%s' % (event.widget, event.x, event.y) 

 

    print 'Got key perss:',event.char 

 

  

 

     

 

tkroot = Tk() 

 

labelfont = ('courier', 20, 'bold')                

 

widget = Label(tkroot, text='Hello bind world') 

 

widget.config(bg='red', font=labelfont)            

 

widget.config(height=5, width=20)                  

 

widget.pack(expand=YES, fill=BOTH) 

 

  

 

widget.bind('<KeyPress>',  showPosEvent)             

 

widget.focus()                                   

 

tkroot.title('Click Me') 

 

tkroot.mainloop() 

響應按鍵事件,以及動態配置控制元件的方式

©著作權歸作者所有:來自51CTO部落格作者hipercomer的原創作品,如需轉載,請註明出處,否則將追究法律責任

Pythonpython tkinter actioPython

3


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/3209/viewspace-2820333/,如需轉載,請註明出處,否則將追究法律責任。

相關文章