1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117
|
import Tkinter
def bool(value):
if value:
return 1
return 0
class Base:
"Base class for all OptionTypes"
def __init__(self, name, default):
self._name = name
self._default = default
self._var = None
def name(self):
return self._name
def set(self, value):
self._var.set(value)
class Boolean(Base):
"A option type for editing boolean values"
def __init__(self, name, default):
Base.__init__(self, name, default)
def field(self, w):
self._var = Tkinter.BooleanVar()
if self._default:
self._var.set(1)
else:
self._var.set(0)
frame = Tkinter.Frame(w, name = self._name + "Frame")
result = Tkinter.Checkbutton(frame,
name=self._name,
text=self._name,
variable=self._var)
result.grid(sticky=Tkinter.W)
frame.columnconfigure(0, weight=1)
return frame
def arg(self):
if bool(self._var.get()) != bool(self._default):
if bool(self._var.get()):
return "--" + self._name
return "--no-" + self._name
return None
class Number(Base):
"OptionType for editing numbers"
def __init__(self, name, default):
Base.__init__(self, name, default)
def field(self, w):
self._var = Tkinter.IntVar()
self._var.set(self._default)
frame = Tkinter.Frame(w, name = self._name + "Frame")
label = Tkinter.Label(frame, text=self._name + ":")
label.grid(row=0, col=0, sticky=Tkinter.W)
entry = Tkinter.Entry(frame,
name=self._name,
textvariable=self._var,
width=4)
entry.grid(row=0, col=1, sticky=Tkinter.E)
for i in range(2):
frame.columnconfigure(i, weight=1)
return frame
def arg(self):
if self._var.get() != self._default:
return "--%s=%d" % (self._name, self._var.get())
return None
class Text(Base):
"OptionType for editing a little bit of text"
def __init__(self, name, default):
Base.__init__(self, name, default)
def width(self):
return int(min(15, len(self._default) * 1.20))
def field(self, w):
self._var = Tkinter.StringVar()
self._var.set(self._default)
frame = Tkinter.Frame(w, name = self._name + "Frame")
label = Tkinter.Label(frame, text=self._name + ":")
label.grid(row=0, col=0, sticky=Tkinter.W)
entry = Tkinter.Entry(frame,
name=self._name,
textvariable=self._var,
width=self.width())
entry.grid(row=0, col=1, sticky=Tkinter.E)
for i in range(2):
frame.columnconfigure(i, weight=1)
return frame
def arg(self):
if self._var.get() != self._default:
return "--%s=%s" % (self._name, self._var.get())
return None
def join(list):
import string
return string.join(list, ", ")
class List(Text):
"OptionType for editing a list of values"
def __init__(self, name, default):
Text.__init__(self, name, join(default))
def set(self, value):
self._var.set(join(value))
|