0
我想在我的程序中有一個布爾標誌,它可以在啓動時從命令行設置,也可以在程序運行時從GUI設置。醜:在Python中設置CheckBox的值布爾值在Python2.7/Tk
我使用OptParser
解析命令行中的選項,並將其作爲變量放入表示GUI的類中。問題似乎是CheckBox需要Tkinter.BooleanVar
才能正常工作。
這是一個最小的工作示例
#!/usr/bin/python
# -*- coding: UTF-8 -*
from __future__ import print_function
from Tkinter import *
from optparse import OptionParser
class CheckBox:
def __init__(self, parent, verbose):
self.verbose = BooleanVar()
if verbose:
self.verbose.set(True)
else:
self.verbose.set(False)
myParent = parent
menubar = Menu(myParent)
myParent.config(menu=menubar)
menubar.add_checkbutton(label="Toggle Verbose",
variable=self.verbose,
)
menubar.add_command(label="Check Verbose", command=self.checkVerbose)
checkVerbose = Button(text="Check Verbose", command=self.checkVerbose)
checkVerbose.pack()
chk = Checkbutton(text="Toggle Verbose",
variable=self.verbose,
onvalue=TRUE,
offvalue=FALSE,
)
chk.pack()
def checkVerbose(self):
print(self.verbose.get())
if __name__ == '__main__':
usage = "usage: %prog [options]"
parser = OptionParser(usage=usage, version="%prog v0.1.x")
parser.add_option('-v', '--verbose',
action='store_true',
dest='verbose',
help='enables output to command line'
)
parser.set_defaults(verbose=False)
(options, args) = parser.parse_args()
# start the program
root = Tk()
CheckBox(root, options.verbose)
root.mainloop()
exit(0)
的代碼工作,因爲它是在這裏,但我得到了我做錯事的感覺,因爲在這裏我設置self.verbose
部分似乎過於複雜:
def __init__(self, parent, verbose):
self.verbose = BooleanVar()
if verbose:
self.verbose.set(True)
else:
self.verbose.set(False)
...
我認爲這裏應該有一些看起來更像是:
def __init__(self, parent, verbose):
self.verbose = verbose
…
這裏的問題是,這兩個CheckBoxes
正確同步了(Tkinter.BooleanVar
型)的變量,但是從我的代碼每隔訪問似乎訪問另一個self.verbose
變量,它是一個正常的Boolean
。
有什麼辦法來美化這個醜陋的建築?
所以我的猜測是正確的)替代塊
- :至少現在它只有一條線... – pando