2013-07-18 11 views
3

Tkinter 스크롤 바의 이상한 bahavior를 제외하고 있습니다. 내 GUI는 기본적으로 Tkinter 텍스트 위젯을 사용합니다. 스크롤바와 관련된/참조됩니다. 텍스트 위젯 자체 파이썬 콘솔 항목에서파이썬 Tkinter 스크롤바 문제

self.textFrame = Tkinter.LabelFrame (self.mainFrame,padx=0,pady=0,width=200,height=100) 
    self.textFrame.grid(row=5, column =1, sticky = "NW", padx = 5, pady = 10) 
    self.consLable = Tkinter.Label (self.textFrame,text = "Log-Console:",font ="Verdana 8 bold") 
    self.consLable.grid (row =6,column =1, sticky = "NW", padx = 5, pady = 1) 
    self.consText= Tkinter.Text(self.textFrame, wrap = "word") 
    self.consText.grid(row =7,column =1, rowspan =4) 
    self.consText.tag_configure("stderr", foreground="#b22222") 
    self.scrollText= Tkinter.Scrollbar(self.textFrame,command = self.consText.yview) 
    self.scrollText.grid(row =7,column =2,rowspan =4,sticky='NSEW') 
    self.consText.config(yscrollcommand = self.scrollText.set) 

    # Referencing output location of the console "print or sys.stderr" methods 
    sys.stdout = gemeindesteckbrief__SupportTools__.TextRedirector(self.consText, "stdout") 
    sys.stderr= gemeindesteckbrief__SupportTools__.TextRedirector(self.consText, "stderr") 

sys.stdoutsys.stderr를 사용하여 삽입됩니다. 텍스트를 삽입하려면 .sys.stderr.write 또는 print 메소드를 덮어 쓰고 텍스트를 Tkinter 텍스트 위젯에 쓰는 지원 클래스가 사용됩니다. 또한 위젯으로 클릭하고 마우스 휠을 사용하여 스크롤, 예상대로 위젯이 작동하는 텍스트에 텍스트를 삽입

class TextRedirector(object): 
def __init__(self,widget, tag): 
    self.targetwidget = widget 
    self.targettag = tag 

#@Override the sys.stdout & sys.stderr methods to write to the text widget instead of the python console 
def write(self, str): 
    self.targetwidget.configure(state="normal") 
    self.targetwidget.insert("end", str, (self.targettag,)) 
    self.targetwidget.configure(state="disabled") 

또한 위로 스크롤 작품 아래 버튼을 사용하여, 잘 작동합니다. 모든 문제는 막대를 사용하여 위아래로 움직이기 시작합니다. 효과가 TclError입니다 : 예상 부동 소수점 숫자 만 가지고 "0,0028"

Exception in Tkinter callback 
Traceback (most recent call last): 
File "C:\Python26\ArcGIS10.0\lib\lib-tk\Tkinter.py", line 1410, in __call__ 
return self.func(*args) 
File "C:\Python26\ArcGIS10.0\lib\lib-tk\Tkinter.py", line 3156, in yview 
self.tk.call((self._w, 'yview') + what) 
TclError: expected floating-point number but got "0,0028" 
+0

숫자와 같은 소리는 로컬 소수점 (',')으로 형식화됩니다. –

+0

'self.scrollText.set'을'lambda '로 변경하면 : self.scrollText.set (s.replace (', ','. '))'뭔가 바뀌 었습니까? 어쩌면 당신은 방법을 포장해야합니다. 하지만 왜 오류가 발생하는지 모르겠습니다. – User

+0

Python, Tkinter, Tk, Tcl의 정확한 버전은 무엇입니까? –

답변

1

그래서, 난 그냥 는 Tkinter가 multple 스레드와 관련된 문제를 갖고있는 것 같아요 내 문제 해결 솔루션의 종류를 발견했다. 그래서 방금 Tkinter.Scrollbarttk.Scrollbar으로 변경했습니다. ttk 모듈은 Tkinter의 확장 버전이며 Tkinter 모듈의 이상한 동작을 해결합니다. 위젯 모든 것을 모듈을 변경 한 후 http://docs.python.org/3.1/library/tkinter.ttk.html

에서

봐이 예상 작품으로!

이 솔루션은 실제 문제의 해결 방법 일 뿐이며 작동합니다!