Har ikke lige leget meget med Tkinter men der er nogle problematikker:
F.eks. kalder du init metoden to gange i Ext, hvilket man normalt kun gør engang:
- tk.Frame.__init__(self)
- self.text = tk.StringVar()
- tk.Frame.__init__(self, master)
Der fjernede jeg den øverste linje og byttede om på rækkefølgen af de to andre siden man normalt kalder __init__ allerførst.
I bunden laver du faktisk 2 forskellige Ext, hvor du overskriver root med den ene. Du kalder title og geometry på root, som nu er et Ext objekt, som ikke understøtter title og geometry det gør den originale root. Her har jeg undgået at overskrive root hvilket gør at stadig kan kalde de to metoder.
Med de ændringer får jeg noget der kører uden fejl (medmindre du trykker cancel ved filvalg):
- from Tkinter import *
- import Tkinter as tk
- from tkFileDialog import askopenfilename
-
- class Ext(tk.Frame):
- def __init__(self, master):
- #tk.Frame.__init__(self)
- tk.Frame.__init__(self, master)
- self.text = tk.StringVar()
- self.scrollbar = tk.Canvas(master, borderwidth=0, background="#ffffff")
- self.frame = tk.Frame(self.scrollbar, background="#ffffff")
- self.txt = tk.Scrollbar(master, orient="vertical", command=self.scrollbar.yview)
- self.scrollbar.configure(yscrollcommand=self.txt.set)
- self.scrollbar.configure(width=500, height=200)
- self.txt.pack(side="right", fill="y")
- self.scrollbar.pack(side="left", fill="both", expand=True)
- self.scrollbar.create_window((0,0), window=self.frame, anchor="nw", tags="self.frame")
- self.create_scrollbar()
-
- def create_scrollbar(self):
- tk.Label(self.frame, text=self.text).grid(column=1)
-
- class App:
- def __init__(self, master):
- frame = Frame(master, height=800)
- frame.pack()
- self.button = Button(frame, text="QUIT", command=frame.quit)
- self.button.pack(side=BOTTOM)
- self.text = Text(frame)
- self.text.pack(side=TOP)
- self.choosen = askopenfilename(initialdir='./')
- self.text.insert(END, open(self.choosen).read())
-
- root = Tk()
- app = App(root)
- ext = Ext(root)
- root.title("Arduino GUI /By Danni.Hansen.1985")
- root.geometry("800x300")
- ext.pack(side="top", fill="both", expand=True)
-
- root.mainloop()
Angående spørgsmålen til det første eksempel, det omhandler mest "pack". Pack er en metode der bestemmer hvordan "pack layout manageren" skal placere elementet (
http://effbot.org/tkinterbook/pack.htm). Der findes også "grid" som gør det på anden måde. "insert" bruges til at indsætte indhold i elementet - i dit tilfælde i slutningen "END". Men der er også "INSERT" som er der hvor markøren er og andre.
De 3 sidste linjer, gør henholdsvis:
1. Laver en Tk rodapplikation. Det er den der bestemmer titlen på dit program og som indeholder dine GUIs.
2. Laver en ny App instans som registrerer et vindue ved Tk rodapplikationen. Ellers ved den ikke vinduet eksisterer.
3. Starter hovedløkken, som lytter efter events (museklik, tastatur og lignende).
Hvorfor bruger du en mere end 10 år gammel udgave af Python?
(Vi har virkelig brug for en kopi tekst med indrykning)
Indlæg senest redigeret d. 28.06.2014 15:38 af Bruger #14645