Tix ScrolledWindow Scrollen per Mausrad

Fragen zu Tkinter.
Antworten
Henkman
User
Beiträge: 7
Registriert: Dienstag 4. April 2017, 16:53

Hallo
Ich möchte eine Oberfläche gestalten, die je nach Auflösung durch eine Scrollbar den Rest dder Oberfläche anzeigbar macht falls diese Größer ist als die Bildschirmauflösung.
Dafür möchte ich das Tix Modul ScrolledWindow nutzen. klappt auch alles aber wie kriege ich es hin, dass die Scrollbar auf mein Mausrad reagiert auch wenn der Mauszeiger nicht auf der Scrollbar ist?

Hier ein kleiner Codeschnipsel vom Grundgerüst:

Code: Alles auswählen

import tkinter, tkinter.scrolledtext
from tkinter import ttk
from tkinter.tix import *

main = Tk()
main.title("Test")
main.wm_state('zoomed')


swin = ScrolledWindow(main, width=1920, height=1080)
swin.pack()
fenster = swin.window

W = ("Gr", "Ge", "Or", "Ro")

RM1var = StringVar()
RM1 = ttk.Combobox(fenster, textvariable=RM1var, height=10, width=10)
RM1.grid(row=1,column=9, sticky="w", pady=10)
RM1['values'] = W

RM2var = StringVar()
RM2 = ttk.Combobox(fenster, textvariable=RM2var, height=10, width=10)
RM2.grid(row=2,column=9, sticky="w", pady=10)
RM2['values'] = W

RM3var = StringVar()
RM3 = ttk.Combobox(fenster, textvariable=RM3var, height=10, width=10)
RM3.grid(row=3,column=9, sticky="w", pady=10)
RM3['values'] = W

RM4var = StringVar()
RM4 = ttk.Combobox(fenster, textvariable=RM4var, height=10, width=10)
RM4.grid(row=4,column=9, sticky="w", pady=10)
RM4['values'] = W

RM5var = StringVar()
RM5 = ttk.Combobox(fenster, textvariable=RM5var, height=10, width=10)
RM5.grid(row=5,column=9, sticky="w", pady=10)
RM5['values'] = W

RM6var = StringVar()
RM6 = ttk.Combobox(fenster, textvariable=RM6var, height=10, width=10)
RM6.grid(row=6,column=9, sticky="w", pady=10)
RM6['values'] = W

RM7var = StringVar()
RM7 = ttk.Combobox(fenster, textvariable=RM7var, height=10, width=10)
RM7.grid(row=7,column=9, sticky="w", pady=10)
RM7['values'] = W

RM8var = StringVar()
RM8 = ttk.Combobox(fenster, textvariable=RM8var, height=10, width=10)
RM8.grid(row=8,column=9, sticky="w", pady=10)
RM8['values'] = W

RM9var = StringVar()
RM9 = ttk.Combobox(fenster, textvariable=RM9var, height=10, width=10)
RM9.grid(row=9,column=9, sticky="w", pady=10)
RM9['values'] = W

RM10var = StringVar()
RM10 = ttk.Combobox(fenster, textvariable=RM10var, height=10, width=10)
RM10.grid(row=10,column=9, sticky="w", pady=10)
RM10['values'] = W

RM11var = StringVar()
RM11 = ttk.Combobox(fenster, textvariable=RM11var, height=10, width=10)
RM11.grid(row=11,column=9, sticky="w", pady=10)
RM11['values'] = W

RM12var = StringVar()
RM12 = ttk.Combobox(fenster, textvariable=RM12var, height=10, width=10)
RM12.grid(row=12,column=9, sticky="w", pady=10)
RM12['values'] = W

RM13var = StringVar()
RM13 = ttk.Combobox(fenster, textvariable=RM13var, height=10, width=10)
RM13.grid(row=13,column=9, sticky="w", pady=10)
RM13['values'] = W

RM14var = StringVar()
RM14 = ttk.Combobox(fenster, textvariable=RM14var, height=10, width=10)
RM14.grid(row=14,column=9, sticky="w", pady=10)
RM14['values'] = W

RM15var = StringVar()
RM15 = ttk.Combobox(fenster, textvariable=RM15var, height=10, width=10)
RM15.grid(row=15,column=9, sticky="w", pady=10)
RM15['values'] = W

RM16var = StringVar()
RM16 = ttk.Combobox(fenster, textvariable=RM16var, height=10, width=10)
RM16.grid(row=16,column=9, sticky="w", pady=10)
RM16['values'] = W

RM17var = StringVar()
RM17 = ttk.Combobox(fenster, textvariable=RM17var, height=10, width=10)
RM17.grid(row=17,column=9, sticky="w", pady=10)
RM17['values'] = W

RM18var = StringVar()
RM18 = ttk.Combobox(fenster, textvariable=RM18var, height=10, width=10)
RM18.grid(row=18,column=9, sticky="w", pady=10)
RM18['values'] = W

RM19var = StringVar()
RM19 = ttk.Combobox(fenster, textvariable=RM19var, height=10, width=10)
RM19.grid(row=19,column=9, sticky="w", pady=10)
RM19['values'] = W

RM20var = StringVar()
RM20 = ttk.Combobox(fenster, textvariable=RM20var, height=10, width=10)
RM20.grid(row=20,column=9, sticky="w", pady=10)
RM20['values'] = W

main.mainloop()
Würde mich freuen wenn mir jemand helfen kann.

MFG Henkman
Zuletzt geändert von Anonymous am Freitag 28. Juli 2017, 21:07, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

Ja dann müßtest Du jedes Widget, auf dem der Mauszeiger sitzen könnte, mit einem Mausrad Event verbinden und diesen wiederum mit der Scrollbar. Wäre wohl ein bißchen aufwendig.
BlackJack

@Henkman: Nicht die eigentliche Frage, aber 20 mal Code kopieren und Namen durchnummerieren schreit förmlich nach einer Liste und einer Schleife.

Und Sternchen-Importe sind immer noch Böse™.

Code: Alles auswählen

from tkinter import tix, ttk

COMBOBOX_VALUES = ['Gr', 'Ge', 'Or', 'Ro']


def main():     
    root = tix.Tk()
    root.title('Test')
    root.wm_state('zoomed')
     
     
    scrolled_window = tix.ScrolledWindow(root, width=1920, height=1080)
    scrolled_window.pack()
    window = scrolled_window.window
     
    rm_vars = list()
    for i in range(1, 21):
        variable = tix.StringVar()
        ttk.Combobox(
            window,
            values=COMBOBOX_VALUES,
            textvariable=variable,
            height=10,
            width=10
        ).grid(row=i, column=0, sticky=tix.W, pady=10)
        rm_vars.append(variable)
         
    root.mainloop()


if __name__ == '__main__':
    main()
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

BlackJack hat geschrieben: Und Sternchen-Importe sind immer noch Böse™.
Ja und auch python ist böse, denn das ist nichts anderes als ein großer Sternchen import.

Richtig wäre eigentlich:

Code: Alles auswählen

import python as my_python

a my_python.= 3 my_python.+ 5
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

@Alfons Mittelmeyer: hallo Troll. Was soll denn die Umbenennung in »my_python«?
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

Sirius3 hat geschrieben:@Alfons Mittelmeyer: hallo Troll. Was soll denn die Umbenennung in »my_python«?
Naja lassen wir das. Stattdessen will ich mal darlegen, warum Sterchenimporte böse sind.

Nehmen wir einmal so ein ganz einfaches Script für Python3 mit einem Sternchenimport:

Code: Alles auswählen

from testimport import *

print("Test")
Und was würde man dann auf der Konsole erwarten?

Bestimmt nicht das, was kommt, nämlich: Sternchenimporte sind böse

Man kann sich mit einem Sternchenimport so einiges einhandeln, wie etwa bei diesem Import File:

Code: Alles auswählen

output = print

def print(*args,**kwargs):
    output("Sternchenimporte sind böse")
Antworten