1

私は学校でそれを実装しようとする投票システムを行っています。

したがって、プログラムは次のようになります。

  1. まだ実装されていない機能は、投票する学生の数に応じていくつかのパスワードを生成します。

  2. メイン ウィンドウにすべての候補が表示されます。

  3. ボタンをクリックすると、パスワードの入力を求めるポップアップ ウィンドウ (トップレベル) が表示されます。

  4. パスワードが正しければ、別のウィンドウ (別のトップレベル、ここに問題があります) がポップアップして、候補を選択するためにクリックするだけでよいボタンがいくつか表示されます。

  5. 完了するまで繰り返します

元のリンク: http://pastebin.com/579ybmPD

コード

from Tkinter import *
import tkMessageBox
class app(object):
    def __init__(self, parent):
        self.availableCodes = [1,2, 3, 4, 5]
        top = self.top = Toplevel(parent)
        self.label1 = Label(top, text = "Ingrese su contrasena")
        self.label1.pack()
        self.entry1 = Entry(top)
        self.entry1.pack()
        self.button1 = Button(top, text = "Ingrese", command = self.ok)
        self.button1.pack(pady= 5)
        self.button1val = 0
        self.button2val = 0
        self.button3val = 0
        self.button4val = 0
        self.button5val = 0
        self.button6val = 0
        self.button7val = 0
        self.button8val = 0
        self.button9val = 0
        self.button10val = 0
        self.button11val = 0
        self.button12val = 0
    def ok(self):
        self.code = int(self.entry1.get())
        self.voteWindow(self.code, self.availableCodes)
        self.top.destroy()
    def voteWindow(self, code, listOfCodes):
        if code in listOfCodes:
            print "True"
            self.optionsWindows(self.top)
            listOfCodes.remove(code)
        else:
            print "False"
    def optionsWindows(self, parent):
        new = self.new = Toplevel(parent)
        self.topframe = Frame(new)
        self.button1 = Button(self.topFrame, text = "Proyecto 1", command = self.close(self.button1val))#( self.button1val))
        self.button1.pack(side = LEFT)
        self.button2 = Button(self.topFrame, text = "Proyecto 2", command =  self.close(self.button2val))#(options, self.button2val))
        self.button2.pack(side = LEFT)
        self.button3 = Button(self.topFrame, text = "Proyecto 3", command =  self.close(self.button3val))#(options, self.button3val))
        self.button3.pack(side = LEFT)
        self.button4 = Button(self.topFrame, text = "Proyecto 4", command =  self.close(self.button4val))#(options, self.button4val))
        self.button4.pack(side = LEFT)
        self.button5 = Button(self.topFrame, text = "Proyecto 5", command =  self.close(self.button5val))#(options, self.button5val))
        self.button5.pack(side = LEFT)
        self.button6 = Button(self.topFrame, text = "Proyecto 6", command =  self.close(self.button6val))#(options, self.button6val))
        self.button6.pack(side = LEFT)
        self.button7 = Button(self.topFrame, text = "Proyecto 7", command = self.close(self.button7val))#(options, self.button7val))
        self.button7.pack(side = LEFT)
        self.button8 = Button(self.topFrame, text = "Proyecto 8", command =  self.close(self.button8val))#(options, self.button8val))
        self.button8.pack(side = LEFT)
        self.button9 = Button(self.topFrame, text = "Proyecto 9", command =  self.close(self.button9val))#(options, self.button9val))
        self.button9.pack(side = LEFT)
        self.button10 = Button(self.topFrame, text = "Proyecto 10", command =  self.close(self.button10val))#(options, self.button10val))
        self.button10.pack(side = LEFT)
        self.button11 = Button(self.topFrame, text = "Proyecto 11", command =  self.close(self.button11val))#(options, self.button11val))
        self.button11.pack(side = LEFT)
        self.button12 = Button(self.topFrame, text = "Proyecto 12", command = self.close(self.button12val))#(options, self.button12val))
        self.button12.pack(side = LEFT)

    def close(self, variable):

        variable +=1

        self.top.destroy()


def onClick():

    run = app(root)

    root.wait_window(run.top)


root = Tk()
root.configure(bg = "white")
mainButton = Button(root, text='Click aqui para votar', command=onClick)
mainButton.pack()
root.mainloop()

したがって、問題は、最後のトップレベル ウィンドウが新しいポップアップに表示されるのではなく、メイン ウィンドウに表示されることです。これを機能させると、オプションが正しく表示されませんでした。助けてください。

4

1 に答える 1

0

optionsWindows() の topframe のスペルが間違っています。また、topf(F)rame をパックしないので表示されません。最後に、optionsWindows のボタンの command= に間違って変数を渡します。

from Tkinter import *
import tkMessageBox
from functools import partial

class app(object):
        def __init__(self, parent):
                self.availableCodes = [1,2, 3, 4, 5]
                top = self.top = Toplevel(parent)
                self.label1 = Label(top, text = "Ingrese su contrasena")
                self.label1.pack()
                self.entry1 = Entry(top)
                self.entry1.pack()
                self.button1 = Button(top, text = "Ingrese", command = self.ok)
                self.button1.pack(pady= 5)

        def ok(self):
                self.code = int(self.entry1.get())
                self.voteWindow()
                self.top.destroy()

        def voteWindow(self):
                print "vote window"
                if self.code in self.availableCodes:
                        print "True"
                        self.optionsWindows(self.top)
                        self.availableCodes.remove(code)
                else:
                        print "False"

        def optionsWindows(self, parent):
                new = self.new = Toplevel(parent)
                self.topFrame = Frame(new)
                self.topFrame.pack()
                for num in range(12):
                    button = Button(self.topFrame, text = "Proyecto %s" % (num+1),
                             command = partial(self.close, num))
                    button.pack(side="left")

        def close(self, variable):
                variable +=1
                print variable, "passed to self.close()"
                self.top.destroy()


def onClick():

        run = app(root)

        root.wait_window(run.top)


root = Tk()
root.configure(bg = "white")
mainButton = Button(root, text='Click aqui para votar', command=onClick)
mainButton.pack()
Button(root, text="Exit", command=root.quit).pack(side="bottom")
root.mainloop()
于 2015-05-26T01:35:32.477 に答える