Python3/tkinterを使って作業中ログアウトスクリプトを作成しました。これを終了するには、ボタンの名前を新しいウィンドウに、次にtxtファイルに転送しようとしています。ランダムに作成されたボタンがどれだけ押されたかを調べるには
自分のサインアウトプログラムで、カテゴリボタンをクリックすると、対応するitems.txtファイルが開き、ファイル内の各項目のボタン付きの新しいウィンドウが作成されます。項目ボタンの1つがクリックされると、サインアウトウィンドウが作成され、名前の入力ボックスと「送信」ボタンが表示されます。送信ボタンを押すと、アイテム名、人の名前、日付、時刻をサインアウトテキストファイルに書き込むようにします。
これまでに私が見つけた答えは、(地雷除去器のように)作成されたボタンのフィールドです。
これらは静的なボタンではないため、どのボタンが押されたか、そのボタンに割り当てられたアイテム名を特定する方法はわかりません。ファイル内の項目の名前と数が変更されます。
button_click_pk
セクションで 'name'グローバルを作成しようとしましたが、最後に作成されたボタンの名前だけが返されます。私はそれが関連しているかどうかはわかりませんが、別の行にその名前が間違っています。
項目ファイブ
ジェーン・スミス2016年12月19日10時30分53秒
私はそれが1行に表示する:
項目ファイブジェーン・スミス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
http://stackoverflow.com/q/6920302/7432 –
http://sopython.com/canon/30/why-do-my-lambda-functions-or-nested-functions-created-in-a -loop-all-use-the-las/ – Lafexlos
両方のリンクをありがとうございます。以前ラムダを見たことがありましたが、私の場合はそれがどのように機能しているのか分かりませんでした。 – poncanach