2016-12-20 13 views
0

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 
+1

http://stackoverflow.com/q/6920302/7432 –

+0

http://sopython.com/canon/30/why-do-my-lambda-functions-or-nested-functions-created-in-a -loop-all-use-the-las/ – Lafexlos

+0

両方のリンクをありがとうございます。以前ラムダを見たことがありましたが、私の場合はそれがどのように機能しているのか分かりませんでした。 – poncanach

答えて

0

日と多くのエラー2の後、私は最終的に私は2 lambda秒をしなければならなかったことを考え出しました。 button_click_pk関数でクラスに渡す必要があり、クラスで2番目にwrite_to_file関数に渡す必要があります。私が2 lambdaを作る必要があるというヒントは、それをはるかに簡単にしたでしょう、私が見つけたlambdaのいずれかのドキュメントで説明されているものではありません。

関連する問題