Toon posts:

[Python/Tkinter]Stringvar werkt niet met 2 windows

Pagina: 1
Acties:
  • 137 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Hoe verder ik kom met mijn programmatje hoe meer problemen ik tegen kom, ik heb nu het volgende probleem:
Ik heb het scherm self.root, om nieuwe gegevens in te voeren maak ik een nieuw scherm aan dat ik NewServerWindow noem, in dit scherm heb je 5 entry velden die naderhand uitgelezen worden door self.[variable].get(). Helaas werkt dit niet meer wanneer ik de 5 entry velden in een aparte window zet.

Het klinkt een beetje verward maar ik zal even wat code geven:
Python:
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
class GUI:
    def __init__(self):
        self.root = root = Tk()

        #Navigation
        NavContainer = Frame(root)
        NavContainer.grid(row=0,column=0,columnspan=5)
        Button(NavContainer,text="New", relief=FLAT, command=self.OpenNewServerWindow).grid(row=0,column=0)
        Button(NavContainer,text="Open", relief=FLAT).grid(row=0,column=1)
        Button(NavContainer,text="Remove", relief=FLAT).grid(row=0,column=2)
        Button(NavContainer,text="Update", relief=FLAT).grid(row=0,column=3)
        Button(NavContainer,text="About", relief=FLAT).grid(row=0,column=4)
        Button(NavContainer,text="Exit", relief=FLAT, command=self.GuiClose).grid(row=0,column=5)

        self.root.mainloop()

    def GuiClose(self):
        self.root.destroy()
        
    def OpenNewServerWindow(self):
        self.NewServerWindow = NewServerWindow = Tk()
        self.NewServerWindowFrame = NewServerWindowFrame = Frame(NewServerWindow)
        InfoCats = ['Name', 'Ip', 'Port', 'User', 'Password', 'Files']

        self.newservername = StringVar()
        self.newserverip = StringVar()
        self.newserverport = StringVar()
        self.newserveruser = StringVar()
        self.newserverpassword = StringVar()
        self.newserverfiles = StringVar()

        y=0
        for cat in InfoCats:
            Label(NewServerWindowFrame, text=cat, justify=LEFT).grid(row=y,column=0)
            y+=1

        e1 = Entry(NewServerWindowFrame, textvariable=self.newservername)
        e1.grid(row=0,column=1)
        e2 = Entry(NewServerWindowFrame, textvariable=self.newserverip)
        e2.grid(row=1,column=1)
        e3 = Entry(NewServerWindowFrame, textvariable=self.newserverport)
        e3.grid(row=2,column=1)
        e4 = Entry(NewServerWindowFrame, textvariable=self.newserveruser)
        e4.grid(row=3,column=1)
        e5 = Entry(NewServerWindowFrame, textvariable=self.newserverpassword)
        e5.grid(row=4,column=1)
        e6 = Entry(NewServerWindowFrame, textvariable=self.newserverfiles)
        e6.grid(row=5,column=1)
        
        Button(NewServerWindowFrame, text="Add Server", command=self.AddServer).grid(row=6,column=0)
        NewServerWindowFrame.grid()
        NewServerWindow.mainloop()
        
    def AddServer(self):
        serverinfo = [self.newservername.get(),self.newserverip.get(),self.newserverport.get(),self.newserveruser.get(),self.newserverpassword.get(),self.newserverfiles.get(),"", "", ""]
        print serverinfo

GUI =

Wat ik ook doe, serverinfo blijft altijd ['', '', '', '', '', '', '', '', '']. Wie weet wat ik fout doe?

Verwijderd

Topicstarter
Alweer opgelost, zoeken met google blijft moeilijk :)

Ik heb een nieuwe class aangemaakt met wat code van effbot.org waardoor ik geen nieuwe Tk() instantie aanroep maar iets anders doe (wat dat is ga ik vanavond nog even bestuderen ;))
Python:
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
class NewServerDialog: 
    def __init__(self,parent):
        top = self.top = Toplevel(parent)
        
        InfoCats = ['Name', 'Ip', 'Port', 'User', 'Password', 'Files']

        self.newservername = StringVar()
        self.newserverip = StringVar()
        self.newserverport = StringVar()
        self.newserveruser = StringVar()
        self.newserverpassword = StringVar()
        self.newserverfiles = StringVar()

        y=0
        for cat in InfoCats:
            Label(top, text=cat, justify=LEFT).grid(row=y,column=0)
            y+=1

        e1 = Entry(top, textvariable=self.newservername)
        e1.grid(row=0,column=1)
        e2 = Entry(top, textvariable=self.newserverip)
        e2.grid(row=1,column=1)
        e3 = Entry(top, textvariable=self.newserverport)
        e3.grid(row=2,column=1)
        e4 = Entry(top, textvariable=self.newserveruser)
        e4.grid(row=3,column=1)
        e5 = Entry(top, textvariable=self.newserverpassword)
        e5.grid(row=4,column=1)
        e6 = Entry(top, textvariable=self.newserverfiles)
        e6.grid(row=5,column=1)
        
        Button(top, text="Add Server", command=self.AddServer).grid(row=6,column=0)
        
    def AddServer(self):
        serverinfo = [self.newservername.get(),self.newserverip.get(),self.newserverport.get(),self.newserveruser.get(),self.newserverpassword.get(),self.newserverfiles.get(),"", "", ""]
        print serverinfo
        return 1