2016-03-22 14 views
0
  1. 中ボタンクリックのためのforループ内で待機中、私はオプションメニューボタンの小数点値に基づいて、forループを作成しようとしています。
  2. 選択したオプションボタンが2の場合、forループは2回循環します。
  3. forループは、forループ内で作成されたボタンがクリックされるまで待つ必要があります。
  4. 以下のコードは同じものを示しています。
    • オプションメニューは、1〜10の範囲を有し、すなわちユーザが作成する1〜10のデバイスを選択することができます。
    • オプションメニューが選択されている瞬間に、オプションメニューのコマンドボタン、すなわちcomp_gt_dataが操作されます。
    • これは、基本的にforループ内を循環し、N個のデバイスの設定を取得します。
    • 1回目のデバイスの設定を終えると、forループ内に「次のデバイス設定を入力」ボタンを作成し、ボタンをクリックして次のデバイスの設定を行うようにします。
    • "Enter Next Device ...."ボタンは作成されず、ループ中に循環し続けます。
    • 私はtime.sleep(60)を使ってみましたが、まだ動作しませんでした。
    • "Enter Next Device .."は基本的に古いデバイス設定を消去しようとし、cvadt_val_loop_exit = 0を設定してwhileループを終了させようとします。
    • QUERY:HOW TO基本的にforループを待機し、ボタンをクリックしてさらに進めますか? ()のための


Tkinterの

self.cvo1 = OptionMenu(root, cvagt_val, *cvagt_list, command=self.comp_gt_data) 
    self.cvo1.pack() 
def comp_gt_data(self, *args): 
    if cvagt_val.get()!=0: 
     cvagt_val_loop = cvagt_val.get() 
     for cvagt_loop in range(1, cvagt_val_loop+1): 
      self.cvad_l0 = Label(root, text="Enter the %d Device Config"% cvagt_loop) 
      self.cvad_l0.pack() 
      self.cvad_l1 = Label(root, text="How Many D~S You Want To Create: ") 
      self.cvad_l1.pack() 
      self.cvad_e1 = Entry(root) 
      self.cvad_e1.pack() 
      self.cvad_l2 = Label(root, text="How Many MS You Want To Create: ") 
      self.cvad_l2.pack() 
      self.cvad_e2 = Entry(root) 
      self.cvad_e2.pack() 
      self.cvad_l3 = Label(root, text="How Many SD You Want To Create: ") 
      self.cvad_l3.pack() 
      self.cvad_e3 = Entry(root) 
      self.cvad_e3.pack() 
      if cvagt_loop < cvagt_val_loop: 
       if not (self.cv_next_dev_cfg_button): 
        self.cv_next_dev_cfg_button = Button(root, text="Enter Next Device Configuration", command=self.cv_next_dev_cfg_button_code) 
        self.cv_next_dev_cfg_button.pack() 
       # Waiting For cvadt_val_loop_exit bit to get set when the cv_next_dev_cfg_button is clicked but its not happening and circulating in the while loop 
       cvadt_val_loop_exit = 1 
       while(cvadt_val_loop_exit): 
        print "Waiting For Next Device Config Button To Be Hit" 
        time.sleep(60) 
      else: 
       self.cv_next_dev_cfg_button_code() 
       if not (self.return_button): 
        self.return_button = Button(root, text="Return To Main Menu", command=self.return_button_code) 
        self.return_button.pack() 
    else: 
     print "Choose Atleast One Device To Create" 
def cv_next_dev_cfg_button_code(self): 
    if (self.cvad_l0): 
     self.cvad_l0.pack_forget(); self.cvad_l0.destroy(); self.cvad_l0 = None 
    if (self.cvad_l1): 
     self.cvad_l1.pack_forget(); self.cvad_l1.destroy(); self.cvad_l1 = None 
    if (self.cvad_l2): 
     self.cvad_l2.pack_forget(); self.cvad_l2.destroy(); self.cvad_l2 = None 
    if (self.cvad_l3): 
     self.cvad_l3.pack_forget(); self.cvad_l3.destroy(); self.cvad_l3 = None 
    if (self.cvad_e1): 
     self.cvad_e1.pack_forget(); self.cvad_e1.destroy(); self.cvad_e1 = None 
    if (self.cvad_e2): 
     self.cvad_e2.pack_forget(); self.cvad_e2.destroy(); self.cvad_e2 = None 
    if (self.cvad_e3): 
     self.cvad_e3.pack_forget(); self.cvad_e3.destroy(); self.cvad_e3 = None 
    if (self.cv_next_agt_cfg_button): 
     self.cv_next_agt_cfg_button.pack_forget(); self.cv_next_agt_cfg_button.destroy(); self.cv_next_agt_cfg_button = None 
    cvadt_val_loop_exit = 0 

答えて

0

Aは、ここでは答えではありません。代わりに関数を正しい回数だけ呼び出して、間にあって長時間待ってください。これはあなたに十分なものを与えてくれるはずです。

try: 
    import Tkinter as tk  ## Python 2.x 
except ImportError: 
    import tkinter as tk  ## Python 3.x 

class ButtonForLoop(): 
    def __init__(self, top): 
     self.top=top 
     self.but_1=tk.Button(top, text="Start for()", command=self.start_for) 
     self.but_1.grid(row=0, column=0) 

     self.num_for=0 
     ## for simplicity, assume 3 iterations through the loop 
     self.max_num=3 

    def next_pass(self): 
     ## create button again 
     self.but_1=tk.Button(top, text="Pass # %d" % (self.num_for), 
          command=self.start_for) 
     self.but_1.grid(row=0, column=0) 

    def start_for(self): 
     """ button clicked so call next_pass() the correct 
      number of iterations 
     """ 
     ## destroy whatever button is showing 
     self.but_1.destroy() 
     if self.num_for < self.max_num: 
      self.num_for += 1 
      self.top.after(500, self.next_pass) 
     else: 
      self.top.quit() 

top=tk.Tk() 
BF=ButtonForLoop(top) 
top. mainloop()