2017-07-28 3 views
1

私が受け取る1または0選択チェックボタンのconfig.ini値によるTkinterの

def show_config(): 
    config = switcher.config_read() 
    setting = Toplevel(root) 
    setting.title = 'Setting Change' 
    setting.geometry('320x620') 
    top = Frame(setting) 
    top.pack(side=TOP) 
    sections1 = Label(top, text='section1') 
    sections1.pack() 
    btn1= IntVar(value=1) 
    btn2= IntVar() 
    btn2.set(1) 
    btn1_check = Checkbutton(top, text='btn1', variable=btn1) 
    btn2_check = Checkbutton(top, text='btn1', variable=btn2) 
    btn1_check.pack(side=LEFT) 
    btn2_check.pack(side=LEFT) 

私はbtn1= IntVar(value=1)を試してみましたが、btn2.set(1)チェックボタンでした代わりに、基本的にTrue/False又は1/0を保持することができ、私はBooleanVar()を用い示唆する任意の整数値を保持することができるIntVar()を使用する未確認

+0

両方の構文を使用すると、ウィジェットの表示方法を示すために、より多くのコードを追加することができ、動作するはず? – PRMoureu

答えて

0

問題がガベージコレクト取得機能の範囲から来ています。

次のコードは動作しないことができます。

import tkinter as tk 

root = tk.Tk() 
def show_config(): 
    check = tk.IntVar(value=1) 
    checkbox = tk.Checkbutton(root, text="check", variable=check) 
    checkbox.pack() 
show_config() 
root.mainloop() 

をこの1つはあなたの設定で設定された値を取得することができます

import tkinter as tk 

root = tk.Tk() 

check = tk.IntVar(value=1) 
checkbox = tk.Checkbutton(root, text="check", variable=check) 
checkbox.pack() 

root.mainloop() 

あなたが(と、変数を保つために簡単にすることができますクラスを使用している場合self.btn1)、それ以外の場合はグローバルを使用できます。


可能な回避策:

import tkinter as tk 

root = tk.Tk() 
check=None 

def show_config(): 
    global check 
    check = tk.IntVar(value=1) 
    checkbox = tk.Checkbutton(root, text="check", variable=check) 
    checkbox.pack() 
show_config() 
root.mainloop() 
+0

しかし 'Toplevel'ウィンドウで' show_config'を呼び出すメニューボタン 'main_menu.add_command(label = 'Setting'、command = show_config)私が投稿したオード。設定がclikedされた場合にのみ、プログラムが起動されたときにConfigは表示されません – Hellbea

+0

@Hellbea次に、関数の外で変数btn1とbtn2を宣言しようとします。グローバル – PRMoureu

+0

でOKですか? thx – Hellbea

0

、のrespec一気に変数に.set()を呼び出すと、その値が渡された値に変更されます。スニペットに続いて.set(True)との「直接」アプローチとシミュレートされた設定ファイル(dict)と間接的アプローチの両方を使用してBooleanVar()を設定する例を示します

from tkinter import * 


def read_config(file_name): 
    # read config from file system 
    # return statement needs to be modified to own needs 
    return {'check_btn_var': 1} 


config = read_config('<file_name>') 

master = Tk() 


# use config from config file for checkbutton cb1 
var1 = BooleanVar() 
var1.set(config.get('check_btn_var')) 

cb1 = Checkbutton(master, text="Checkbutton", variable=var1) 
cb1.pack() 


# use hard coded value for checkbutton cb2 
var2 = BooleanVar() 
var2.set(True) 

cb2 = Checkbutton(master, text="Checkbutton", variable=var2) 
cb2.pack() 


mainloop() 
+0

と同じです。それは 'def show_config():'を使用し、 'main_menu.add_command(label = 'Setting'、command = show_config)'で呼び出すことができます。このボタンは 'Checkbutton'をチェックする必要がある' Toplevel'ウィンドウを呼び出します。しかし、私は 'true'か' 1'を手作業で入れていませんでした。 – Hellbea

関連する問題