2019年11月26日 星期二

Tkinter 語法糖




-----------------------------------------------
好用的分隔線
-----------------------------------------------

mysep = Separator(root,orient=HORIZONTAL)
mysep.pack(fill=X,padx=25)



-----------------------------------------------
Tkinter 的 widget有個 after好用的method
-----------------------------------------------

label.after(1000,runcounter)
表示一秒後執行 runcounter()

如未加 runcounter, 則可當成 delay(1000),停一秒的意思.

-----------------------------------------------
Label  如何夾帶圖檔: (其它widget類似作法)
-----------------------------------------------
1.case git:

mygif = PhotoImage(file='xxx.gif')
mygif=mygif.zoom(2)     ## 放大幾倍
mygif = mygif .subsample(3)  ## 縮小
label_gif = Label(root,image=mygif )
label_gif.pack()

2.case jpg:

(1).要 pip install pillow
(2). from PIL import Image,ImageTk

myimage = Image.open('Lighthouse.jpg')
width=350
height=200
image = image.resize((width,height), Image.ANTIALIAS)  # pixel 不會灰灰的.
mylighthouse = ImageTk.PhotoImage(image)

# label_jpg = Label(root,image=mylighthouse)   ## 只有圖

label_jpg = Label(root,text='demo program to \ncompound left'
                  , justify='right'
                  ,compound='left',image=Lighthouse)                             ## 圖在左,文字在右. 效果很好

label_jpg.pack()


沒justify文字置中

有justify='right'文字切右




3.case icon:

label4=Label(root,bitmap='hourglass',
             #compound='left',text='icondemo'
             #compound='center',text='icondemo'
             compound='top',text='icondemo'
             )
label4.pack()



-----------------------------------------------
如何定義button 及bind事件處理程式
-----------------------------------------------
def clickfunc():     <== 應會帶一個event的參數
      print('you click me')

btn  = Button(root,text='hit me',command=clickfunc)

如何在不同btn傳入不同function , 這個要查一下. 好像有很多種作法




-----------------------------------------------
如何作 button.visible=False  及 button.visible=True
-----------------------------------------------
如用 grid
button.grid(column=0,row=0)
button.grid_forget()

重新顯示則用原來grid
button.grid(column=0,row=0)

如用 pack 則一樣
button.pack_forget()
重新顯示則用原來pack
button.pack

-----------------------------------

如何改變動態 window 的大小及位置

 for i in range(1,100):
        position=str(200+i)+'x'+str(200+i)+'+'+str(200+i)+'+'+str(300+i)
                      ##    pos_x 'x' pos_y  + size_x '+' size_y     position 參數值意義
        print(position)
        window.geometry(position)
        window.update()         ## 加這行才會動態顯示.

---------------------------------------------------------------------

label 如何給值及取值:
--------------------------------------------------

給值:
val = StringVar()
val.set('初始值')
lbl1 = Label(root,textvariable=val)

取值:
ans = val.get()


----------------------------------------------

Entry 如何給值及取值:
----------------------------------------------
給值:
val2 = StringVar()
val2.set('文字輸入欄初值')

username = Entry(window,textvariable=val2)
username.pack()
取值:
print('username內容:'+username.get())
或者:
print('username內容:'+val2.get())

val2.get())

--------------

如果 未給變數, 但要給初值時, 要用insert():
password = Entry(window,show="*")
password.insert(END,'Password')
password.pack()

memo = Entry(window,text='memo')
memo.insert(END, 'default text')
memo.pack()

取值時則一定要用元件名.get()
    ans= 'username內容:'+username.get() +'\n'
    ans += 'password:'+password.get() +'\n'
    ans += 'memo:'+memo.get()
    val.set(ans)
----------------------------------------------

b.config(relief=SUNKEN) <== 指一般程式所謂的border
 SUNKEN / RAISED / GROOVE / RIDGE/ FLAT. 預設值為 RAISED.






沒有留言: