Tkinter按下按钮以生成列表

詹姆士·邓普斯

我正在尝试创建一个从列表中生成按钮的系统,然后每按一个按钮,该按钮就会消失并更新列表中的一个值,该值按按按钮的顺序创建的长度相等,即[1,3 ,2,4]表示先按下第一个按钮,然后再按下第3个,第2个等。

我目前在按钮将消失的阶段就拥有它,但还不能增加其顺序或产生列表。

def buttonSelected(k, buttonNames, order, itemButton, buttonOrder):
    order = order + 1
    itemButton[k].destroy()
    buttonOrder[k] = order

    orderText = ["first, second, third"]
    if order <= 2:
        lbl.configure(text="Which button do you want to click first?")
    else:
        lbl.configure(text="Which button do you want to click %sth?" % order)
    return order

def chooseOrder(buttonNames, order, buttonOrder):
    orderText = ["first, second, third"]
    itemButton = []

    for i in range(len(buttonNames)):
        print i
        itemButton.append('')
        itemButton[i] = tkinter.Button(window, text=buttonNames[i], command=lambda c=i: buttonSelected(c, buttonNames, order, itemButton, buttonOrder), font=("Helvetica", 10))
        itemButton[i].pack()

    if order <= 2:
        lbl.configure(text="Which button do you want to click first?")
    else:
        lbl.configure(text="Which button do you want to click %sth?" % order)

buttonOrder = []
for i in range(len(buttonNames)):
        buttonOrder.append(0)

chooseOrder(buttonNames, 0, buttonOrder)

我的订单不会重复,因为我还没有退货,也不知道如何退货。

这是我完整的代码:

# import and rename the 'tkinter' module for < Python 3.3
import Tkinter as tkinter
import os

class Checkbar(tkinter.Frame):
    def __init__(self, parent=None, picks=[], side=tkinter.TOP, anchor=tkinter.W):
        tkinter.Frame.__init__(self, parent)
        self.vars = []
        for pick in picks:
            var = tkinter.IntVar()
            chk = tkinter.Checkbutton(self, text=pick, variable=var, font=("Helvetica", 10))
            chk.pack(side=side, anchor=anchor, expand=tkinter.YES)
            self.vars.append(var)
    def state(self):
        return map((lambda var: var.get()), self.vars)

def moduleSelected(k, wantedModules, order, itemButton, moduleOrder):
    order = order + 1
    #for j in range(len(itemButton)):
    itemButton[k].destroy()
    moduleOrder[k] = order

    #chooseOrder(wantedModules, order)
    orderText = ["first, second, third"]
    if order <= 2:
        lbl.configure(text="Which item do you want appearing first?")
    else:
        lbl.configure(text="Which item do you want appearing %sth?" % order)
    if order == len(moduleOrder):
        moduleOrder1Finished = 1
    return order

def chooseOrder(wantedModules, order, moduleOrder):
    orderText = ["first, second, third"]
    itemButton = []

    for i in range(len(wantedModules)):
        print i
        itemButton.append('')
        itemButton[i] = tkinter.Button(window, text=wantedModules[i], command=lambda c=i: moduleSelected(c, wantedModules, order, itemButton, moduleOrder), font=("Helvetica", 10))
        itemButton[i].pack()
    print wantedModules

    if order <= 2:
        lbl.configure(text="Which button do you want appearing first?")
    else:
        lbl.configure(text="Which button do you want appearing %sth?" % order)

def chooseOrders(moduleList, moduleSelectColumn, order):
    wantedModules = []
    moduleOrder = []

    for i in range(len(moduleList)):
        if moduleList[i] == 1:
            wantedModules.append(moduleSelectColumn[i])
            moduleOrder.append(0)

    chooseOrder(wantedModules, order, moduleOrder)



def modulesSelected(modules1, moduleSelectColumn1, modules2, moduleSelectColumn2, moduleSelectButton):
    moduleList1 = modules1.state()
    moduleList2 = modules2.state()
    modules1.destroy()
    modules2.destroy()
    moduleSelectButton.destroy()

    moduleOrder1 = chooseOrders(moduleList1, moduleSelectColumn1, 0)
    moduleOrder2 = chooseOrders(moduleList2, moduleSelectColumn2, 0)

def produceSurvey():
    moduleSelectColumn = []
    for i in range(4):
        moduleSelectColumn.append([])

    moduleSelectColumn[1] = ['cheese', 'wine', 'bread', 'cereal']

    moduleSelectButton = tkinter.Button(window, text="Finish Selecting", bg="#ffffff", font=("Helvetica", 16), command=lambda: modulesSelected(modules1, moduleSelectColumn[1], modules2,moduleSelectColumn[2], moduleSelectButton))
    moduleSelectButton.pack(side=tkinter.TOP)
    modules1 = Checkbar(window, moduleSelectColumn[1])
    modules2 = Checkbar(window, moduleSelectColumn[2])
    modules1.pack(side=tkinter.LEFT)
    modules2.pack(side=tkinter.RIGHT)

    lbl.configure(text="Select which buttons you want to Select?")
    window.geometry("720x720")


def analSurvey():
    print "analysing survey!"

def optionButton(option, option1, option2):
    option1.destroy()
    option2.destroy()
    if option == 1:
        produceSurvey()
    elif option == 2:
        analSurvey()

def callback_and_hide(button):
    callback()
    button.destroy()

def callback():
    lbl.configure(text="What would you like to do?")
    option1 = tkinter.Button(window, text="Help JameswDemps on stackexchange", bg="#ffffff", font=("Helvetica", 16), command=lambda: optionButton(1, option1, option2))
    option1.pack()
    option2 = tkinter.Button(window, text="go to a blank page", bg="#ffffff", font=("Helvetica", 16), command=lambda: optionButton(2, option1, option2))
    option2.pack()

# create a new window
window = tkinter.Tk()
# set window title
window.title("Button Presser")

# Gets the requested values of the height and widht.
windowWidth = window.winfo_reqwidth()
windowHeight = window.winfo_reqheight()

# Gets both half the screen width/height and window width/height
positionRight = int(window.winfo_screenwidth()/2 - windowWidth/2)
positionDown = int(window.winfo_screenheight()/2 - windowHeight/2)

# Positions the window in the center of the page.
window.geometry("+{}+{}".format(positionRight-250, positionDown-150))
window.geometry("720x480")

# set the window background to hex code ...
window.configure(background="#ffffff")

# create a label widget call 'lbl'
lbl = tkinter.Label(window, text="Welcome to the Button presser!", bg="#ffffff", font=("Helvetica", 24))
# creat a text entry widget called 'ent'
#ent = tkinter.Entry(window)


# create a button widget called btn
startBtn = tkinter.Button(window, text="Start", command=lambda: callback_and_hide(startBtn), font=("Helvetica", 16))
# pack (add) the widget into the window
lbl.pack()
#ent.pack()
startBtn.pack()

# draw the window, and start the 'application'
window.mainloop()
内吉·巴布(Negi Babu)
RESULT = []

def moduleSelected(k, wantedModules, order, itemButton, moduleOrder):
    order = order + 1
    #for j in range(len(itemButton)):
    itemButton[k].destroy()
    moduleOrder[k] = order
    print k
    RESULT.append(k+1)
    print RESULT # -> This will print the output you want.
    #chooseOrder(wantedModules, order)
    orderText = ["first, second, third"]
    if order <= 2:
        lbl.configure(text="Which item do you want appearing first?")
    else:
        lbl.configure(text="Which item do you want appearing %sth?" % order)
    if order == len(moduleOrder):
        moduleOrder1Finished = 1
    return order

我添加了一个“结果”列表来存储单击按钮的顺序。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章