2016-08-04 8 views
-1

私は数時間は検索しましたが、同じ問題を抱えている人は見つかりませんでした。私の質問はコードの後に​​来る。TkinterのEntryウィジェットから入力テキストを取得して使用します。

class Interface: 
    def __init__(self, root): 
      --- Stuff Here --- 
      self.hEntry = Entry(lFrame) 
      self.hEntry.bind("<Return>", self.aMethodToGetText) 
      --- Stuff Here --- 

    def aMethodToGetText(self, event): 
      return event.widget.get() 

    def anotherMethod(self): 
      --- Stuff Here --- 
      self.hEntry.pack() 
      h = self.aMethodToGetText()?????????????????? 
      --- Stuff Here --- 

私は方法 aMethodToGetTextリターンというのが私の変数時間に価値を与えたいです。そのようにそれを呼び出すと、OFCエラーを与える:

TypeError例外:aMethodToGetText()欠落1つの必須位置引数: 'イベント'

H = self.aMethodToGetText(self.hEntry)を使用し、ウィジェットを除去します。も機能しません。

1つのエントリがあれば簡単に解決できます。しかし、私は多くのエントリーを持っており、すべてのエントリーに対して一般的なテキストゲッターメソッドを作成する必要があります。

編集:だから私は各エントリに1つの機能が必要ですか?私は、さまざまな条件、機能、スライスで各エントリを使いたいと思っています。だから私は各エントリの変数が必要です。 EnterModeを押すたびに関数を開始したくないため、anotherMethod(self)をaMethodToGetText(self、event)に移動することはできません。私が同じことをしたいエントリでEnterを押すと、そのエントリを変数に割り当てます。しかし、各エントリは別の変数に割り当てる必要があります。私はエントリーをお互いに比較する必要があります。

EDIT 2:

class Interface: 
    def __init__(self, root): 
      --- Stuff Here --- 
      self.aListForEntries = [] 
      self.hEntry = Entry(lFrame) 
      self.hEntry.bind("<Return>", self.aMethodToGetText) 
      self.aEntry = Entry(lFrame) 
      self.aEntry.bind("<Return>", self.aMethodToGetText) 
      --- Stuff Here --- 

    def aMethodToGetText(self, event): 
      entry = event.widget.get() 
      self.aListForEntries.append(entry) 

    def anotherMethod(self): 
      --- Stuff Here --- 
      self.hEntry.pack() 
      h = self.entryList[0] #IndexError: list index out of range 
      --- Check the first Entry --- 
      self.aEntry.pack() 
      a = self.entryList[1] 
      --- Check the second Entry --- 
      if h == a: 
       Do stuff 
      --- Stuff Here --- 

ユーザーが入力押された前に、リストが空であるので、私はエラーを取得します。私はtime.sleep(x)の行の前にh = self.entryList[0]のスクリプトをポーズしようとしましたが、それは動作しません。ユーザがEnterを押す前に、プログラム全体がanotherMethod(self)を実行することは望ましくありません。

+0

@noscreenname最初のパラメータ 'self'はメソッドであることを暗示しています。これは1つのパラメータ' event'が必要です。 – Delioth

+0

複数のエントリがある場合、そのようなケースの例を挙げることができます。解決方法は、各エントリの処理内容によって大きく異なります。あなたがどんなエントリーでもenterを押すならば、彼らはすべて同じものか、それぞれ違う何かをするべきですか?異なる場合は、このエントリまたはそのエントリが使用されている場合、何をすべきかの条件を追加しない限り、一般的な機能を持つことはできません。 –

+0

@StevenSummersだから、私は各エントリに1つの機能が必要ですか?私は、さまざまな条件、機能、スライスで各エントリを使いたいと思っています。だから私は各エントリの変数が必要です。 ボタンが押されるたびに関数を開始したくないため、anotherMethod(self)をaMethodToGetText(self、event)に移動することはできません。 EDIT:同じことをしたいエントリでEnterキーを押した場合は、そのエントリを変数に割り当てます。しかし、各エントリは別の変数に割り当てる必要があります。私はエントリーをお互いに比較する必要があります。 – WildRoyal

答えて

-2

ラムダを試してみましたか?

lambda event, h = event.widget.get(): self.aMethodToGetText(event) 
0

EDIT::のようなもの例は、内容が一致した場合にディスプレイにラベルを設定する2つのエントリウィジェットを持っています。

import tkinter as tk 

class Example(object): 
    def __init__(self, master): 
     self._master = master 

     self._lbl = tk.Label(master, text = '?') 
     self._lbl.pack(side = tk.LEFT) 

     self.hEntry = tk.Entry(master) 
     self.hEntry.bind("<Return>", self.update) 
     self.hEntry.pack() 

     self.aEntry = tk.Entry(master) 
     self.aEntry.bind("<Return>", self.update) 
     self.aEntry.pack() 

    def update(self, event): 
     if self.hEntry.get() == self.aEntry.get(): 
      self._lbl.config(text = "Match") 
     else: 
      self._lbl.config(text = "No Match") 

if __name__ == '__main__': 
    root = tk.Tk() 
    app = Example(root) 
    root.mainloop() 
+0

本当に私が欲しいものではありません。私は2つのエントリを持っていると私はユーザーがif文で記述する入力を比較したいとしましょう。それ、どうやったら出来るの?私のEDIT 2を見てください。 – WildRoyal

+0

私は自分の答えを編集しました、これはあなたの後でしたか? –

+0

その時点で1つのエントリを表示したいとします。 2番目のエントリを表示する前に最初の入力が正しいかどうかを確認したい。私は自分の投稿を更新しました。 私のコードは300行です。私はここに私のコードを表示したくない、申し訳ありません。 – WildRoyal

関連する問題