2017-01-13 16 views
-1

おかげで選択肢を使用して、複数の変数を割り当てる:のPython 3.5:Tkinterのドロップダウンメニューで、私は、リストボックスのために、次のコードを持っているfurasへ

import tkinter as tk 

def on_button(): 
#  for i, var in enumerate(o_vars): 
#   print('OptionMenu {}: {}'.format(i, var.get())) 
#  print() 

    print('ListBox:', l.curselection()) 
    for i in l.curselection(): 
     print('option:', OPTIONS[i]) 
    print() 


# --- main --- 

OPTIONS = ["Script 1","Script 2","Script 3","Script 4","Script 5"] 

root = tk.Tk() 

# --- Listbox --- 

tk.Label(root, text='Listbox', bg='#aaa').pack(fill='x') 

l = tk.Listbox(root, selectmode='multiple') 
l.pack() 
l.insert('end', *OPTIONS) 

# --- others --- 

b = tk.Button(root, text='OK', command=on_button) 
b.pack(fill='x') 

root.mainloop() 

私はそれを実行すると、それは私に、以下のポップアップを提供します(画像は、以下に示します)。私はそれから私の選択をする。

enter image description here

私は立ち往生午前ところです...私は、ユーザーがスクリプト2の印刷「スクリプト2」を選択した場合は言いたいです。ユーザーがスクリプト5を選択した場合は、「スクリプト5」を印刷します。

以下

は、私が試したコードですが、それはアウトエラーが発生した:

if l.curselection() == 'Script1': 
    print ('test') 
if l.curselection() == 'Script2': 
    print ('test2') 

TclError:無効なコマンド名も」0.92911768"

、どのように私は、 『OK』下の 『終了』ボタンを追加します?

*ドロップダウンメニューを閉じるとオプションを1つだけ表示することができた後、すべてのヘルプは大幅に

+0

はあなたの近くにドロップダウンメニューが、このウィジェットはオプションを1つだけ表示することができます - あなたは1つだけ選択することができます理由ですオプション。同時に複数のオプションを選択する必要がある場合は、[Listbox](http://effbot.org/tkinterbook/listbox.htm)を使用してください。 – furas

+0

ところで、私たちはクラスに 'CamelCase'という名前を使用します。コードを読みやすくするための 'SimpleFormApp' - [PythonコードのためのPEP 8 - スタイルガイド](https://www.python.org/dev/peps/pep-0008/) – furas

+0

質問のテキストは決して変更しないでください! - 新しい情報を以下に追加してください。今あなたは、他のユーザーには無益です。 – furas

答えて

0

OptionMenuを高く評価している - それはより多くのオプションを選択することはできませんので。

ですから、この方法のいずれかを使用することができます:あなたはここで選択することができますだけ多くのOptionMenuで多くの要素

  • 多くCheckbutton
  • を選択することができます

    • 多くOptionMenu
    • Listboxを注文実行スクリプト。

      例では、1つのウィンドウ内のすべてのメントを示しています。

      enter image description here

      import tkinter as tk 
      
      # --- functions --- 
      
      def on_button(): 
          for i, var in enumerate(o_vars): 
           print('OptionMenu {}: {}'.format(i, var.get())) 
          print() 
      
          print('ListBox:', l.curselection()) 
          for i in l.curselection(): 
           print('option:', OPTIONS[i]) 
          print() 
      
          print('ChecboxBox:') 
          for i, var in enumerate(cb_vars): 
           if var.get(): 
            print('option:', OPTIONS[i]) 
      
      # --- main --- 
      
      OPTIONS = ["Script 1","Script 2","Script 3","Script 4","Script 5"] 
      
      root = tk.Tk() 
      
      # --- OptionMenu --- 
      
      tk.Label(root, text='OptionMenus', bg='#aaa').pack(fill='x') 
      
      o_vars = [] 
      
      for i in range(3): 
          var = tk.StringVar(value='- select -') 
          o_vars.append(var) 
          o = tk.OptionMenu(root, var, *OPTIONS) 
          o.pack() 
      
      # --- Listbox --- 
      
      tk.Label(root, text='Listbox', bg='#aaa').pack(fill='x') 
      
      l = tk.Listbox(root, selectmode='multiple') 
      l.pack() 
      l.insert('end', *OPTIONS) 
      
      # --- Checkbuttons --- 
      
      tk.Label(root, text='Checkbuttons', bg='#aaa').pack(fill='x') 
      
      cb_vars = [] 
      for x in OPTIONS: 
          var = tk.BooleanVar(value=False) 
          cb_vars.append(var) 
          c = tk.Checkbutton(root, text=x, variable=var) 
          c.pack() 
      
      # --- others --- 
      
      b = tk.Button(root, text='OK', command=on_button) 
      b.pack(fill='x') 
      
      root.mainloop() 
      

      結果:

      OptionMenu 1: Script 1 
      OptionMenu 2: Script 3 
      OptionMenu 3: Script 5 
      
      ListBox: (0, 2, 4) 
      option: Script 1 
      option: Script 3 
      option: Script 5 
      
      ChecboxBox: 
      option: Script 1 
      option: Script 3 
      option: Script 5 
      

      GitHubの:furas/python-examples/tkinter/checkbutton-listbox-optionmenu

    +0

    ありがとうございます!私は次のステップで少し混乱している。リストボックスオプションをドロップダウンメニューに使用したいとし、スクリプト1とスクリプト2を選択するとします。選択したオプションがスクリプト1の場合は "スクリプト1"、選択されたオプションがスクリプト2の場合 "スクリプト2"の印刷 – PineNuts0

    +0

    の場合、 'OptionMenu'ではなく' Listbox'を使用することができます。 'l.curselection()'はリストボックス内の選択された行の数を返します。これはOPTIONSからテキストを取得するために使用する必要があります - 関数 'on_button()'と 'ListBox:(0、2、 4) ' – furas

    +0

    私はお詫び申し上げます。私はtkinterとクラスにはとても新しいです...上記の意味を理解していません。 – PineNuts0

    関連する問題