2017-08-04 15 views
1

私は以下のコードを記述しようとしていますが、それはパイソン - Tkinterの - コマンドの引数

質問期待通りに働いていなかった方法を呼び出す方法:私は最初のTkinterのウィンドウで、ログインボタンを表示したい を、

しかし、私はコマンド引数で最初に "資格情報の入力"ポップアップが来て、そのボタンに効果がない "ログイン"ボタンが表示されています。

この場合、ログインボタンを呼び出す方法をお勧めします。ここで

は、コードを行く:

import sys 
import tkinter.messagebox as box 
from tkinter.filedialog import asksaveasfile 
if sys.version_info[0] >= 3: 
    import tkinter as tk 
else: 
    import Tkinter as tk 


class App(tk.Frame): 

    def __init__(self, master, username, password): 
     tk.Frame.__init__(self, master) 

     self.dict = {'Asia': ['Japan', 'China', 'Malaysia'], 
        'Europe': ['Germany', 'France', 'Switzerland']} 

     self.variable_a = tk.StringVar(self) 
     self.variable_b = tk.StringVar(self) 

     self.variable_a.trace('w', self.update_options) 
     self.variable_b.trace('w', self.fun2) 

     self.optionmenu_a = tk.OptionMenu(self, self.variable_a, *self.dict.keys(), command=self.fun) 
     self.optionmenu_b = tk.OptionMenu(self, self.variable_b, '') 
     export = self.sample(username, password) 
     self.button = tk.Button(self,text="Login", command=export) 

     self.variable_a.set('Asia') 

     self.optionmenu_a.pack() 
     self.optionmenu_b.pack() 
     self.button.pack() 
     self.pack() 

    def fun(self,value): 
     print(value) 

    def fun2(self, *args): 
     print(self.variable_b.get()) 

    def sample(self, username, password): 
     box.showinfo('info', 'Enter Credentials') 



    def update_options(self, *args): 
     countries = self.dict[self.variable_a.get()] 
     self.variable_b.set(countries[0]) 

     menu = self.optionmenu_b['menu'] 
     menu.delete(0, 'end') 

     for country in countries: 
      menu.add_command(label=country, command=lambda nation=country: self.variable_b.set(nation)) 


if __name__ == "__main__": 
    root = tk.Tk() 
    username = "root" 
    password = "admin" 
    app = App(root, username, password) 
    app.mainloop() 

答えて

1

あなたが得る理由の問題は、あなたがポップアップを表示する機能exportを宣言する方法から来て、それはメッセージボックスを表示sampleメソッドの呼び出しを行い、それはですポップアップが早すぎます。

クイックフィックスとして、直接コマンドでは、ラムダによってexportものを置き換える:

self.button = tk.Button(self, 
         text="Login", 
         command=lambda : self.sample(username, password)) 
+0

その作業を... !!助けてくれてありがとう – Shanky

関連する問題