以下のサンプルコードをご覧ください。メインウィンドウがあり、関数fun2
を呼び出して変数a
(ラベル付き/テキスト)の値を表示します。同時に、メインウィンドウのメニュー項目は、2つのボタンを持つ2次ウィンドウ(機能fun1
)を起動します。これらのボタンを使ってa
の値を変更する方法を見つけようとしています。グローバル/ローカル変数の更新に関する問題
グローバル変数a = 0
(行6)が含まれていないと、グローバル名「aが定義されていません」というエラーが表示されます。これを含めると(この例のように)、ウィンドウボタンは変数に影響を与えません(a = 0
のままです)。私はfun1
にglobal a
というコマンドを使ってみましたが、何の効果もありません。私もfun2
でも同じコマンドを使って実験しましたが、まだ動作させることができません。
アイデア?私は間違って何をしていますか?
import Tkinter
import random
import time
from Tkinter import *
a = 0
def fun1():
win2 = Toplevel()
win2.geometry("300x300")
def var_yes():
a = 1
win2.after(500, lambda: win2.destroy())
def var_no():
a = 0
win2.after(500, lambda: win2.destroy())
button1 = Tkinter.Button(win2, text ="1", command = var_yes).pack()
button2 = Tkinter.Button(win2, text ="2", command = var_no).pack()
def fun2():
value = 0
if a == 1:
value = a
granresult = "{}".format(value)
lbl.configure(text = str(granresult))
def gui_stuff(window):
global lbl
window.configure(background="#000000")
window.geometry("700x500")
lbl = Tkinter.Label(window, height=5, anchor = "c", text="Label", bg="#000000", fg="#ffffff", font=("Helvetica", 22))
lbl.pack()
fun2()
window = Tkinter.Tk()
menubar = Menu(window)
filemenu = Menu(menubar, tearoff=0)
menubar.add_cascade(label="Program", menu=filemenu)
filemenu.add_command(label="test", command=fun1)
window.config(menu=menubar)
gui_stuff(window)
window.update()
winx1 = window.winfo_rootx()
winy1 = window.winfo_rooty()
winh1 = window.winfo_height()
window.mainloop()
清潔で正確で実装しやすいソリューションです。完璧! –