Scroll und Canvas/Frame Problem

Fragen zu Tkinter.
Antworten
Benutzeravatar
icekoid
User
Beiträge: 1
Registriert: Samstag 3. Oktober 2020, 14:35
Wohnort: Graz

Hallo! :geek:
Ich habe vor 2 Tagen angefangen mit Python zu programmieren und kann gar nicht mehr aufhören, deswegen habe ich gedacht versuche ich mich doch einmal an tkinter. Nun stoße ich auf die ersten Probleme... und ich finde keinen Fix dafür.

Das erste Problem ist leicht erklärt: Der Scroll im Canvas funktioniert 0, einfach gar nicht.

Das zweite Problem ist etwas schwerer zu erklären, deswegen würde ich euch bitten vllt den Code in eurer IDE einzufügen und es einfach mal laufen zu lassen... Wenn man öfters auf den Add Button klickt, werden ja logischerweise mehrere "Lines" von Checkboxen und Text hinzugefügt. Allerdings desto öfter man klickt, desto weiter sind die von einander verschoben... (Bild)

Bild

Bitte um Hilfe!

Mein Code:

Code: Alles auswählen

import tkinter as tk
import tkinter.font as tkfont

mainWin = tk.Tk()
mainWin.title("ToDo List by Ezequiel")
mainWin.geometry("650x300")

todoFont = tkfont.Font(family="Helvetica", size = 12)

canvas = tk.Canvas(mainWin, scrollregion=(0,0,650,300), height = 650, width = 300)
scrollbar = tk.Scrollbar(mainWin,command= canvas.yview)

canvas.pack(side = "left")
scrollbar.pack(side = "right", fill = "y")

canvas.config(yscrollcommand=scrollbar.set)
canvas.config(yscrollincrement="2")


textFrame = tk.Frame(canvas)
textFrame.pack(side = "right")

checkFrame = tk.Frame(canvas)
checkFrame.pack(side = "left")

def addText():
    textB = tk.Text(textFrame, width=60, height=1, font=todoFont, bd=1,
                    highlightbackground="steel blue", highlightcolor="light sky blue")
    textB.pack(side="bottom", pady=10)
def addCheck():
    checkB = tk.Checkbutton(checkFrame)
    checkB.pack(side="bottom", pady=10)

def addTodo():
    addText()
    addCheck()

addB = tk.Button(mainWin, text= "Add ToDo", command = addTodo)
addB.place(x = 540,y = 245)

mainWin.mainloop()

Icekoider als die Antarktis!
Benutzeravatar
__blackjack__
User
Beiträge: 14085
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@icekoid: Die Verschiebung zwischen Checkboxen und Texteingaben kommt daher, das die nicht gleich hoch sind.

Warum hast Du eigentlich `Text` aber mit der Höhe 1 für die Eingaben und nicht `Entry`?

Namen werden in Python klein_mit_unterstrichen geschrieben. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (MixedCase).

Auf Modulebene sollte nur Code stehen der Konstanten, Funktionen, und Klassen definiert. Das Hauptprogramm steht üblicherweise in einer Funktion die `main()` heisst. Und dann kannst Du auch nicht mehr so einfach globale Variablen verwenden. Jede nicht-triviale GUI braucht objektorientierte Programmierung (OOP), also mindestens eine eigene Klasse.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten