我有這樣的代碼(對不起,不是真正的最小化):
import tkinter as tk
class MainApplication(tk.Frame)。
def __init__(self, parent, *args, **kwargs)。
# tk.Frame.__init__(self, parent, *args, **kwargs)
super().__init__(parent, *args, **kwargs)
self.reader = parent
# self.reader = tk.Toplevel(self)
self.reader.title("XXX")
self.reader.resizable(False, True)
self.reader.geometry("650x5")
self.reader.minsize(650,150)
self.panel = tk.Text(self.reader, wrap="word", width=12, font=('Courier',14)
self.viewer = tk.Text(self.reader, wrap="word", font=('Courier', 14)
self.viewer.insert(tk.INSERT,'h
m
bbb
tt
bbb')
self.panel.insert(tk.INSERT,'hgggg
gggm
bbb
bbbbtt
bbb')
self.labelv1 = tk.IntVar()
# self.labelv1.set(int(self.panel.index('end-1c').split('.')[0]))
self.labelv2 = tk.IntVar()
# self.labelv2.set(int(self.viewer.index('end-1C').split('.') [0]))
self.pippo = tk.StringVar()
# self.pippo.set(("Panel : " str(self.labelv1) " Viewer : " str(self.labelv2)))
self.label = tk.Label(self.reader, textvariable = self.pippo)
self.label.pack(side='top')
# self.update_labels()
self.counter = tk.IntVar()
self.counter.set(0)
# self.reader.bind_class('Text', '<Key>', self.update_labels() #winfo_toplevel()/span>
# self.winfo_toplevel().bind("<Key>", self.update_labels())
# self.reader.bind("<Key>", self.update_labels())
self.reader.bind("<Key>", lambda event: self.update_labels()
self.scrollbar = tk.Scrollbar(self.reader, command=(self.on_scrollbar))
self.scrollbar.pack(side="right"/span>, fill="y"/span>)
self.panel.pack(side="left", fill="both", expand=True)
self.viewer.pack(side="right", fill="both", expand=True)
# 改變設定以使滾動作業。
# self.scrollbar['command'] = self.on_scrollbar
self.panel['yscrollcommand'] = self.on_textscroll
self.viewer['yscrollcommand'] = self.on_textscroll
def update_labels(self, *args)。
print('OKK'/span>)
self.labelv1.set(int(self.panel. index('end-1C').split('。')[0])
self.labelv2.set(int(self.viewer. index('end-1C').split('. ')[0])
self.pippo.set("Panel : "/span> str(self. labelv1.get()) " Viewer : " str(self.labelv2.get() )
self.counter.set(self.counter.get() 1)
print(' updating labels : ' , self.counter.get(),' / ' , self.pippo.get()
回傳。
def on_scrollbar(self, *args)。
""
當滾動條被移動時,將滾動兩個文本部件
""
self.panel.yview(*args)
self.viewer.yview(*args)
def on_textscroll(self, *args)。
''當滑鼠滾輪移動到一個文本部件上時,會移動滾動條并滾動文本部件。
移動滾動條并滾動文本部件''
self.scrollbar.set(*args)
self.on_scrollbar('moveto', args[0] )
if __name__ == "__main__"/span>:
master = tk.Tk()
MainApplication(master)
master.mainloop()
我不明白為什么會這樣:
self.reader.bind("<Key>", lambda event: self.update_labels())/code>
這就把文本視窗內的任何按鍵系結到一個函式update_labels(),該函式報告了視窗內的文本行數
。
作業,而
self.reader.bind("<Key>", self.update_labels())
沒有。
并沒有。我讀了很多檔案和例子,在SO上也是如此,但我沒能弄明白為什么后者不能正常作業。
uj5u.com熱心網友回復:
你的問題是因為你給出了函式的輸出而不是它的參考。為了解決你的問題,你應該這樣做:
self.reader.bind("<Key>"/span>, self.update_labels)
并在某處定義:
def update_labels(self, event)。
...
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/319436.html
標籤:
