如何找出已按下哪个随机创建的按钮

时间:2016-12-20 02:03:46

标签: python-3.x button tkinter

我使用Python3 / tkinter创建了一个可用的注销脚本。为了完成它,我试图将按钮的名称转移到新窗口,然后转移到txt文件。

在我的退出计划中,当用户点击某个类别按钮时,它会打开相应的items.txt文件,然后创建一个新窗口,其中包含文件中每个项目的按钮。单击其中一个项目按钮时,将创建一个注销窗口,其中包含名称的“输入”框和“提交”按钮。按下提交按钮后,我希望它将项目名称,人名,日期和时间写入注销文本文件。

到目前为止,我找到的答案是关于创建按钮的领域(如在扫雷中)。

由于这些不是静态按钮,我不知道如何确定按下了哪个按钮以及为该按钮分配了哪个项目名称。文件中的名称和项目数会发生变化。

我试图在button_click_pk部分中创建'name'全局,但它只返回创建的最后一个按钮的名称。我不知道它是否相关,但它错误地将名称放在另一条线上。

第五项

Jane Smith 2016-12-19 10:30:53

我希望它在一行显示:

项目五Jane Smith 2016-12-12 13:30:53

如何将名称绑定到txt文件中for循环中创建的按钮?

class Writefiles:
    def __init__(self):
        global win3
        win3 = Tk()

        self.VarEnt = StringVar()

        self.lab = Label(win3, text = "Signature")
        self.lab.grid(padx = 10, pady = 10)

        self.ent = Entry(win3, font = ('Lucida Handwriting', 10), textvariable = self.VarEnt, bd = 5, width = 45)
        self.ent.focus()
        self.ent.grid(padx = 10, pady = 10)

        self.btn = Button(win3, text = 'Submit', width = 10, height = 2, background = 'gold', command = self.write_to_file)
        self.btn.grid(padx = 10, pady = 10)


    def write_to_file(self):
        date = datetime.now().strftime('   %Y-%m-%d  %H:%M:%S')

        with open('sig.txt', 'a') as f:
            f.write(name + self.ent.get() + date + '\n')
            f.close()

        win3.destroy()


def button_click_pk():   # creates the buttons from text file
    global name
    win2 = Tk()
    file = open('item.txt', 'r')
    rw = 0
    cl = 0
    for name in file:
        b1 = Button(win2, text = name, wraplength = 100, width = 18, height = 5, background = 'gold', command = Writefiles)
        b1.grid(row = rw, column = cl, padx = 11, pady = 13)
        cl += 1
        if cl == 4:
            cl = 0
            rw += 1

1 个答案:

答案 0 :(得分:0)

经过2天和许多错误,我终于发现我必须做2 lambda s。您需要button_click_pk函数中的一个将其传递给Class,并在Class中将其传递给write_to_file函数。提示我需要制作2 lambda s会使它变得更容易,这不是我发现的任何lambda文档中解释的内容。