2017-01-25 8 views
0

Tkinterでチェックボックスのリストを作成しましたが、すべてのチェックボックスを1つのチェックボックスで選択したいと思います。ここでTkinter/python:すべてのチェックボタンを選択するチェックボタンを作成する方法

は私のコードの一部です:私は、ファイルを押し、「すべてを選択」を実行すると

root = tk.Tk() 
root.title("SOMETHING") 

buttons=[] 
#If it is checked, then run the file 
def callback(): 
    for var, name in buttons: 
     if var.get(): 
      subprocess.call("python " + "scripts/" + name) 

for name in os.listdir("scripts"): 
    if name.endswith('.py') or name.endswith('.pyc'): 
     if name not in ("____.py", "_____.pyc"): 
      var = tk.BooleanVar() 
      cb = tk.Checkbutton(root, text=name, variable=var) 
      cb.pack() 
      buttons.append((var,name)) 

def select_all(): 
    if var1.get(): 
     for i in cb: 
      i.select(0,END) 

def deselect_all(): 
    if var2.get(): 
     for i in cb: 
      i.deselect_set(0,END) 

var1=tk.BooleanVar() 
selectButton = tk.Checkbutton(root, text="Select All", command=select_all, variable=var1) 
selectButton.pack() 

var2=tk.BooleanVar() 
deselectButton = tk.Checkbutton(root, text="None", command=deselect_all, variable=var2) 
deselectButton.pack() 

submitButton = tk.Button(root, text="Run", command=callback) 
submitButton.pack() 

root.mainloop() 

、私はこのエラーを取得する:「str」はオブジェクトが属性を持っていない「選択します」。

ありがとうございました:)

+0

はあなたがCBに私のために ''何を期待している: ''行うには? '' cb''はリストではなく、あなたが作成した最後のチェックボタンです。また、 '' .select(0、END) ''は、Checkbutton上で意味のある操作ではありません。また、私はBooleanVarがあなたのチェックボタンのために働くとは思わない - デフォルトのオン/オフ状態は1/0であり、真/偽ではない。代わりにIntVarを試してください。これらの変数を指定すると、ボタンを選択/選択解除する方法は、変数に '' .set(1) 'または' '.set(0)' 'を呼び出すことです。 – jasonharper

+0

@jasonharper def select_all()は、「すべて選択」チェックボックスがオンになっている場合に表示され、リストを通過してすべてを選択します。しかし、私はその機能のために何を書くべきか分かりません。そして、ええ、私はBooleanVarをIntVarに変更しました。おかげで – RABBIT

答えて

0

私はあなたのコードを確認し、作業中のtkinterコードを添付しました。サブプロセスを使用することで問題を解決することができます。

私の主なコメントは、あなたがコントロール変数を使用し、その値を取得して設定する方法を使用することが不適切であるということです。私は不要なコードを削除しました。また、あなたのリストから情報を抽出する方法を示しました。これがあなたのtkinterコーディングの旅に役立つことを願っています。

の作業コード:

import tkinter as tk 
import os, subprocess 

#If it is checked, then run the file 
def callback(): 
    if var.get(): 
     for i in buttons: 
      cmd = "python3 " + filedir +"/" + i[1] #Note:Runs python3 and not python2 
      print(cmd) 
      subprocess.call(cmd) 

def select_all(): # Corrected 
    for item in buttons: 
     v , n = item 
     if v.get(): 
      v.set(0) 
     else: 
      v.set(1) 

root = tk.Tk() 
root.title("SOMETHING") 

filedir = 'test' 
buttons=[] 

for name in os.listdir(filedir): 
    if name.endswith('.py') or name.endswith('.pyc'): 
     if name not in ("____.py", "_____.pyc"): 
      var = tk.IntVar() 
      var.set(0) 
      cb = tk.Checkbutton(root, text=name, variable=var) 
      cb.pack() 
      buttons.append((var,name)) 

var1=tk.IntVar() 
var1.set(0) 
selectButton = tk.Checkbutton(root, text="Select All", command=select_all, 
           variable=var1) 
selectButton.pack() 

submitButton = tk.Button(root, text="Run", command=callback) 
submitButton.pack() 

root.mainloop() 
+0

ありがとう!それは今働きます! :) – RABBIT

+0

ああしかし、私は別のチェックボックスをクリックすると、すべてをクリックします。 – RABBIT

+0

@RABBIT私の悪い..作業コードを修正してアップロードしました。 –