2016-03-29 9 views
0

Ich habe entdeckt, dass tk.Scrollbar mit Einsatz von Touch ermöglicht die Rolle auf einem Text-Widget. Als ich die Grafiken meiner Anwendung überarbeitete, konnte ich Touch nicht mehr verwenden, um das Text-Widget zu scrollen, das stattdessen ttk.Scrollbar verwendete.No Touch-Scrolling bei der Verwendung von `ttk.scrollbar` über` tk.scrollbar`

Ich bin sicher, es ein Unterschied zwischen der Widgets ist, weil ich zwischen den beiden umgeschaltet habe, als das Problem zu testen.

Dass gesagt wird es kein großes Problem, da nur eine Handvoll Geräte wird dieses Programm installiert werden, auf wird Touch-Fähigkeiten haben.

Gibt es eine Möglichkeit Touch auf einem ttk.scrollbar zu bekommen?

EDIT: Relevante Abschnitt von Code: EDIT # 2:

self.text=tk.Text(self,font=("Consolas","11"),wrap="none",undo=True,bg="white",relief="flat") 
    self.numb=tk.Text(self,font=("Consolas","11"),wrap="none",width=4,relief="flat") 

    self.vsb=ttk.Scrollbar(self,command=self.scroller) 
    self.hsb=ttk.Scrollbar(self,command=self.text.xview,orient="horizontal") 

    self.text.configure(yscrollcommand=self.on_textscroll,xscrollcommand=self.hsb.set) 
    self.numb.config(bg="grey94",yscrollcommand=self.on_textscroll) 

def scroller(self,*args):#Move me 
    self.text.yview(*args) 
    self.numb.yview(*args) 
def on_textscroll(self, *args):#Move me 
    self.vsb.set(*args) 
    self.scroller('moveto', args[0]) 
+0

Um dies richtig zu bekommen. Was genau bezeichnen Sie als "erlaubt die Verwendung der Berührung zum Scrollen"? In den meisten Geräten verwenden Touch-Implementierungen ein "Klick" -Verhalten. Meinst du damit, dass du auf eine bestimmte Position innerhalb des Scrollbalken-Widgets klickst, um den Schieberegler in diese Richtung zu bewegen? – R4PH43L

+0

@ R4PH43L Sorry, ich hätte angeben sollen, dass dies über das Text-Widget selbst erfolgt. Darunter verstehe ich das Auf- und Abbewegen wie auf einem Word-Dokument oder im Notizblock. Es funktioniert, wenn die Bildlaufleisten tk sind, nur nicht ttk. –

+2

Ok. Können Sie die Implementierung posten, die Sie in Ihrer Anwendung verwendet haben? – R4PH43L

Antwort

0

(Nicht unbedingt eine Antwort, die beiden Funktionen am unteren Rand hinzugefügt, aber zumindest Code zu experimentieren und vielleicht auf bauen ein machen antwort.)

Der folgende Bildlauf erfolgt in alle Richtungen mit gedrückter mittlerer Maustaste entweder mit tk (Zeile 2 auskommentiert) oder ttk Bildlaufleiste (Zeile 2 unkommentiert).

from tkinter import Tk, Text, Scrollbar 
from tkinter.ttk import Scrollbar 

class Test(Tk): 
    def __init__(self): 
     super().__init__() 

     self.text = Text(self, wrap="none",undo=True,bg="white",relief="flat") 
     self.numb = Text(self, wrap="none",width=4,relief="flat") 

     self.vsb = Scrollbar(self,command=self.scroller) 
     self.hsb = Scrollbar(self,command=self.text.xview,orient="horizontal") 

     self.text.configure(yscrollcommand=self.on_textscroll,xscrollcommand=self.hsb.set) 
     self.numb.config(bg="grey94",yscrollcommand=self.on_textscroll) 

     self.numb.grid(row=0, column=0) 
     self.text.grid(row=0, column=1) 
     self.vsb.grid(row=0, column=2, sticky='ns') 
     self.hsb.grid(row=1, column=1, sticky='ew') 
     for i in range(100): 
      self.text.insert('insert', 
       ('abcdefg%2d '%i)*10 + '\n') 

    def scroller(self,*args):#Move me 
     self.text.yview(*args) 
     self.numb.yview(*args) 
    def on_textscroll(self, *args):#Move me 
     self.vsb.set(*args) 
     self.scroller('moveto', args[0]) 

root=Test() 

folgendes am Ende der init aussetzt Klicks mittlere Maustaste Hinzufügen (es ist botton 2, nicht mehr als 3), ohne den schnecken-Effekt zu deaktivieren. Bewirken Fingerberührungen dies, entweder mit der Bildlaufleiste? Wenn nicht, versuchen Sie herauszufinden, welche Ereignisberührungen generiert werden.

 def pr(event): 
      print(event) 
     self.text.bind('<Button-2>', pr) 
     self.text.bind('<ButtonRelease-2>', pr) 
+0

Ich habe alle Optionen, einschließlich der Freigabe und Bewegungen durchlaufen. Sie haben nichts offenbart. Gibt es eine Möglichkeit, alle Ereignisse zu drucken, an denen ein Widget beteiligt ist? –

+0

Ich schaute durch die Abschnitte in http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/events.html und fand aber nicht . Meine nächste Vermutung ist, dass bei Berührungssystemen Fingerberührung und Bewegung als virtuelle Ereignisse definiert sind. Sie könnten root.event_info() 'versuchen, um definierte virtuelle Ereignisse auf regulären und Touch-Systemen aufzulisten und zu sehen, ob letztere zusätzliche Ereignisse hat. http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/universal.html#event_info –