2012-11-01 19 views
0

我正在使用TixBalloon在GUI中生成工具提示,我想將工具提示或狀態消息作爲StringVar()的文本中的一些Entry小部件。變量。因此,代碼會看起來像:Python:TixBalloon,使用StringVar()作爲消息

from Tkinter import * 
from Tix import * 
root = Tk() 
status = Label(root, height = 3, width=30, bd=1,bg='yellow',wraplength = 210) 
status.grid(row = 0,column = 0,pady = 10) 
bal = Balloon(root,statusbar = status) 
frame_1 = Frame(root,relief=RIDGE,bd = 2) 
frame_1.grid(row=1,column = 0) 
Angles = [StringVar(),StringVar()] 
Angles[0].set('0') 
Angles[1].set('1') 

#Incomming 
label_in = Label(frame_1,text = "TH_in") 
label_in.grid(row = 0,column = 0) 

entry_in = Entry(frame_1, width = 20, textvariable = Angles[0]) 
entry_in.grid(row = 0,column = 1) 

#Outgoing 
label_out = Label(frame_1,text = "TH_out") 
label_out.grid(row = 1,column = 0) 

entry_out = Entry(frame_1, width = 20, textvariable = Angles[1]) 
entry_out.grid(row=1,column=1) 

#tool tip/status bar 
bal.bind_widget(label_in,balloonmsg='Incidence Angle',statusmsg = Angles[0].get()) 
bal.bind_widget(label_out,balloonmsg='Detector Angle',statusmsg = Angles[1].get()) 
root.mainloop() 

然而這僅會的「角[0]」和「角度[1]」的狀態中,而不是更新的原始值時的文本輸入框被改變。

回答

2

您可以使用StringVar.trace來綁定一個回調函數,只要StringVar發生變化,回調函數就會被調用。據推測,你可以使用該回調來更改bal中的statusmsg(儘管我不知道任何關於TixBalloon的信息,所以我可能是錯的)。

+0

這可能很好 - 我知道你不能在實際的狀態消息本身上使用跟蹤(你可以跟蹤它,但回調不能影響實際狀態消息),但它可能會讓它改變綁定的消息....我會去嘗試。 –

+0

它的工作,或多或少,可悲的是它不會強制氣球在鍵入時更新(您必須將鼠標移開並移回),但我認爲這是Tix.Balloon的一個限制。 –

+0

您可以在回調中使用類似'bal.subwidget('message')[「text」] ='的內容來立即更新氣球標籤(但是,您需要一些測試來查找哪個工具提示處於活動狀態)。 – FabienAndre

1

氣球Tix控件是一個超級控件由實際的Tkinter/Tix控件組成。

您可以通過bal.subwidget('message')檢索Label消息,從而可以共享EntryBalloonLabel之間的變量。

bal.subwidget('message')["textvariable"] = Angles[0] 

然而,由於message標籤氣球實例的所有工具提示之間的共享,你需要爲每個條目/提示對的Balloon實例。

相關問題