Toon posts:

[Python] Programme geeft niks na toevoegen van grid

Pagina: 1
Acties:

Verwijderd

Topicstarter
Python is helemaal nieuw voor mij zeker het gebruiken van GUI, de enige ervaring die ik daarop heb is de klik&drag mode van visual basic. Nu ben ik al tijdje bezig aan een programma dat je helpt grote bestanden te zoeken op je HD. Alles werkte (ongeveer) tot ik .grid toegevoegd heb. Ik heb in tutorials gelezen dat grid word gebruikt om objecten te kunnen verdelen in een soort tabel structuur. Ik heb dit dan toegepast tot de list en 2 buttons van me. In de tutorial stond dat je best geen gebruik maakte van frame dus ik heb deze dan verwijderd, veel verandering bracht het wel niet. Zien jullie de fout die ik maak ? (Tips zijn ook welkom ivm code, anders leert men nooit ;) )

Hieronder de code: (zoals ik al zei geeft het programma niks, ook geen error)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import os, sys
from stat import *
from os.path import join
from Tkinter import *

class App:

    def __init__(self, master):

        # List
        self.list = Listbox(self, selectmode=EXTENDED).grid(row=1)
        self.list.config(borderwidth=1, height=15, width=50)
        self.current = None
            
        # Exit Button
        self.button_exit = Button(self, text="Exit Program", command=frame.quit).grid(row=0, column=0)
        self.button_exit.grid(row=0, column=0)

        # Scan Button
        self.button_scan = Button(self, text="Scan disk", command=self.scan_disk).grid(row=0, column=1)
        
    def scan_disk(self):
        for root, dirs, files in os.walk("c:\\apache", topdown=False):
            for name in files:
                filename = join(root, name)
                filesize = os.stat(filename)[ST_SIZE]
                if filesize > 20000:
                    file = filename, " : ",filesize
                    print file
                    self.list.insert(END, file)
        
root = Tk()

app = App(root)

root.mainloop()

Verwijderd

Topicstarter
na een tijdje bleek hij toch een error te geven (niet dat ik daarmee verder ben)

code:
1
2
3
4
5
6
7
8
9
10
11
12
Traceback (most recent call last):
  File "C:\Python23\FileFinder", line 34, in -toplevel-
    app = App(root)
  File "C:\Python23\FileFinder", line 11, in __init__
    self.list = Listbox(self, selectmode=EXTENDED).grid(row=1)
  File "C:\Python23\lib\lib-tk\Tkinter.py", line 2382, in __init__
    Widget.__init__(self, master, 'listbox', cnf, kw)
  File "C:\Python23\lib\lib-tk\Tkinter.py", line 1829, in __init__
    BaseWidget._setup(self, master, cnf)
  File "C:\Python23\lib\lib-tk\Tkinter.py", line 1807, in _setup
    self.tk = master.tk
AttributeError: App instance has no attribute 'tk'

  • djc
  • Registratie: December 2001
  • Laatst online: 08-09-2025

djc

Hmm, ik heb zelf geen ervaring met Tkinter, maar ik heb de indruk dat het wel eens zo zou kunnen zijn dat je in plaats van
code:
1
self.list = Listbox(self, selectmode=EXTENDED).grid(row=1)
beter
code:
1
self.list = Listbox(master, selectmode=EXTENDED).grid(row=1)
kan doen.

Maar dat is dus maar een klein gokje.

Rustacean


Verwijderd

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import os, sys
from stat import *
from os.path import join
from Tkinter import *

class App:

    def __init__(self, master):

        # List
        self.list = Listbox(master, selectmode=EXTENDED)
        self.list.grid(row=1)
        self.list.config(borderwidth=1, height=15, width=50)
        self.current = None
            
        # Exit Button
        self.button_exit = Button(master, text="Exit Program", command=master.quit)
        self.button_exit.grid(row=0, column=0)

        # Scan Button
        self.button_scan = Button(master, text="Scan disk", command=self.scan_disk).grid(row=0, column=1)
        
    def scan_disk(self):
        for root, dirs, files in os.walk("c:\\apache", topdown=False):
            for name in files:
                filename = join(root, name)
                filesize = os.stat(filename)[ST_SIZE]
                if filesize > 20000:
                    file = filename, " : ",filesize
                    print file
                    self.list.insert(END, file)
        
root = Tk()

app = App(root)

root.mainloop()



Manuzhai heeft gelijk, hetzelfde geldt ook voor de button. Je gebruikt touwens bij de button 2 x grid.

HTH,

Arjen