Tkinter: Scrollbar erstellen?
Hey Leute!
Ich habe nochmal eine Frage.
Ich wollte für mein erstes GUI-Projekt in Python eine Scrollbar hinzufügen. Ich habe allerdings keine Ahnung, wie ich dass angehen soll.
Es wäre nett, wenn mir das jemand mithilfe meines Codes erklären könnte. 😄
PS.: Ja, ich weiß, dass der Code ziemlich chaotisch und optimierungsfähig mit OOP ist. 😄
from tkinter import *
from functools import partial
import time
quests = [
'first_quest',
'second_quest',
'third_quest',
'fourth_quest'] fenster = Tk() fenster.title('MiniQuiz')
fenster.geometry('800x800')
def welcome(sentence, quest1, quest2, quest3, quest4, result1, result2, result3, result4):
question = Label(text=sentence)
question.config(width=1000)
question.pack()
a_button = Button(text=quest1, command=result1)
a_button.pack()
b_button = Button(text=quest2, command=result2)
b_button.pack()
c_button = Button(text=quest3, command=result3)
c_button.pack()
d_button = Button(text=quest4, command=result4)
d_button.pack()
def counter(punkte):
punktestand = Label(text='Punktestand:')
counter = Label(fenster, text= punkte)
punktestand.pack(anchor=NW)
counter.pack(anchor=NW)
def right():
output = Label(text='Richtig!')
output.pack()
for item in quests:
if 'first_quest' == quests[0]:
quests.remove('first_quest')
second_quest()
elif 'third_quest' == quests[0]:
quests.remove('third_quest')
fourth_quest()
def right2():
output = Label(text='Richtig!')
output.pack()
for item in quests:
if 'second_quest' == quests[0]:
quests.remove('second_quest')
third_quest()
def final():
output = Label(text= 'Du hast gewonnen! Herzlichen Glückwunsch')
output.pack()
def wrong():
output = Label(text='Leider falsch! Viel Glück beim nächsten mal!')
output.pack()
def first_quest():
welcome('BEVOR es losgeht: Du kannst einen Button nur einmal anklicken, machst du es öfters kannst du nicht mehr gewinnen! ' 'Frage 1: Was ist das größte Bundesland Deutschlands?', 'Bayern', 'Niedersachsen', 'Nordrhein Westfahlen', 'Schleswig-Holstein', right, wrong, wrong, wrong)
def second_quest():
counter(1)
welcome('Frage 2: Welches Atom ist am einfachsten Aufgebaut?', 'Sauerstoff', 'Wasserstoff', 'Helium', 'Atome unterscheiden sich nicht vom Aufbau', wrong, right2, wrong, wrong)
def third_quest():
counter(2)
welcome('Frage 3: Welches Spiel hat 1993 die Videospielszene mit seiner 3D Optik "Revolutioniert" ?', 'Counter Strike Source', 'Half-Life', 'Doom', 'Call Of Duty', wrong, wrong, right, wrong)
def fourth_quest():
counter(3)
welcome('Frage 4: Wie hieß das erste Lebewesen, welches von Menschen in die Umlaufbahn der Erde befördert wurde?', 'Bruno', 'Neil Armstrong', 'Michael Collins', 'Laika', wrong, wrong, wrong, final)
def winner():
counter(4)
output = Label(fenser, text='Du hast gewonnen!')
output.pack()
first_quest()
fenster.mainloop()
2 Antworten
Ich würde garnicht mit einem Scrollbalken arbeiten sondern die beantworteten Fragen und Buttons ausblenden. Dazu kannst du den Counter für den Punktestand weiter oben ansiedeln und den immer aktualisieren.
Formatieren hättest du deinen Code dennoch mal können.
Ein einfaches, kleines Scrollbar-Beispiel findet sich unten auf dieser Seite: https://www.tutorialspoint.com/python/tk_scrollbar.htm
Danke erstmal <3
Die Sache ist dass mir die Scrollbar zwar angezeigt wird, aber wenn ich an der Scrollbar Scrolle (lol) das Fenster nicht weiter nach unten geht.
Ich habe mir bis eben dein Programm noch nicht ganz angeschaut (aufgrund der Formatierung), würde dir nun aber zu demselben Verfahren raten, welches markb1980 schon angemerkt hat. Es sollte immer nur eine Frage mit ihren Antwortmöglichkeiten angezeigt werden. Dann brauchst du auch keine Scrollbar mehr.
Ob du die Antworten dennoch in eine Listbox steckst oder nicht, ist dir überlassen. In ersterem Fall könntest du aber eine Listbox anlegen, die bei jedem Aufruf einer neuen Frage nur mit neuen Werten (den Antwortmöglichkeiten) gefüllt wird. Ein Label wird genutzt, um die Frage anzuzeigen und ein Button zum Abschicken der gewählten Antwort.
Danke für die schnelle Antwort, wie kann ich denn die Buttons etc. ausblenden?