Skip to content

Commit 0d5c00b

Browse files
James Fosterjgfoster
James Foster
andauthored
Update GUI with fewer boxes and more density-independent layout. (Open-Acidification#74)
Co-authored-by: James Foster <[email protected]>
1 parent 29f5b9a commit 0d5c00b

File tree

1 file changed

+79
-47
lines changed

1 file changed

+79
-47
lines changed

GUI/TankController.py

Lines changed: 79 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66

77
try:
88
import libTC
9-
print('TankController version ', libTC.version())
109
except ImportError:
1110
print('libTC not found!')
1211
exit()
@@ -19,15 +18,17 @@
1918

2019

2120
class TankController(wx.Frame):
21+
border = 5
2222

2323
def __init__(self, parent, title):
24-
super(TankController, self).__init__(
25-
parent, title=title, size=(850, 600))
24+
super(TankController, self).__init__(parent, title=title)
25+
self.setBorder()
2626
self.InitUI()
2727
self.Centre()
2828
self.Show()
2929
self.startLoop()
3030
libTC.setTemperature(12.345)
31+
self.SetClientSize(self.FromDIP(wx.Size(825, 600)))
3132

3233
def InitUI(self):
3334
self.layoutMain()
@@ -37,6 +38,11 @@ def loop(self, event):
3738
libTC.loop()
3839
self.updateDisplay()
3940

41+
def setBorder(self):
42+
osName = wx.PlatformInformation.Get().GetOperatingSystemIdName()
43+
if (osName == 'Apple Mac OS X'):
44+
self.border = 0
45+
4046
def startLoop(self):
4147
self.timer = wx.Timer(self)
4248
self.Bind(wx.EVT_TIMER, self.loop, self.timer)
@@ -45,104 +51,123 @@ def startLoop(self):
4551
def layoutMain(self):
4652
self.panel = wx.Panel(self)
4753
self.panel.Bind(wx.EVT_CHAR, self.Keyboard)
48-
mainSizer = wx.BoxSizer(wx.VERTICAL)
49-
mainSizer.Add(self.layoutTop(), flag=wx.EXPAND | wx.LEFT | wx.RIGHT, border=5)
50-
mainSizer.Add(self.layoutBottom(), flag=wx.EXPAND | wx.LEFT | wx.RIGHT, border=5)
51-
self.panel.SetSizer(mainSizer)
54+
sizer = wx.BoxSizer(wx.VERTICAL)
55+
sizer.Add(self.layoutTop(), flag=wx.EXPAND |
56+
wx.LEFT | wx.RIGHT, border=self.border)
57+
sizer.Add(self.layoutBottom(), flag=wx.EXPAND |
58+
wx.LEFT | wx.RIGHT, border=self.border)
59+
self.panel.SetSizer(sizer)
5260

5361
def layoutBottom(self):
5462
sizer = wx.BoxSizer(wx.HORIZONTAL)
55-
sizer.Add(self.layoutSerial(), flag=wx.EXPAND | wx.LEFT | wx.RIGHT, border=5)
63+
sizer.Add(self.layoutSerial(), flag=wx.EXPAND |
64+
wx.LEFT | wx.RIGHT, border=self.border)
5665
return sizer
5766

5867
def layoutTop(self):
5968
sizer = wx.BoxSizer(wx.HORIZONTAL)
60-
sizer.Add(self.layoutTopLeft(), flag=wx.EXPAND | wx.LEFT | wx.RIGHT, border=5)
61-
sizer.Add(self.layoutEEPROM(), flag=wx.EXPAND | wx.LEFT | wx.RIGHT, border=5)
69+
sizer.Add(self.layoutTopLeft(), flag=wx.EXPAND |
70+
wx.LEFT | wx.RIGHT, border=self.border)
71+
sizer.Add(self.layoutEEPROM(), flag=wx.EXPAND |
72+
wx.LEFT | wx.RIGHT, border=self.border)
6273
return sizer
6374

6475
def layoutTopLeft(self):
65-
sizer = wx.StaticBoxSizer(wx.VERTICAL, self.panel)
66-
sizer.Add(self.layoutDevice(), flag=wx.EXPAND | wx.LEFT | wx.RIGHT, border=5)
67-
sizer.Add(self.layoutTank(), flag=wx.EXPAND | wx.LEFT | wx.RIGHT, border=5)
76+
sizer = wx.BoxSizer(wx.VERTICAL)
77+
sizer.Add(self.layoutDevice(), flag=wx.EXPAND |
78+
wx.LEFT | wx.RIGHT, border=self.border)
79+
sizer.Add(self.layoutTank(), flag=wx.EXPAND |
80+
wx.LEFT | wx.RIGHT, border=self.border)
6881
return sizer
6982

7083
def layoutTank(self):
71-
sizer = wx.StaticBoxSizer(wx.HORIZONTAL, self.panel)
72-
sizer.Add(self.layoutTemp(), flag=wx.EXPAND | wx.LEFT | wx.RIGHT, border=5)
73-
sizer.Add(self.layoutPH(), flag=wx.EXPAND | wx.LEFT | wx.RIGHT, border=5)
84+
sizer = wx.BoxSizer(wx.HORIZONTAL)
85+
sizer.Add(self.layoutTemp(), flag=wx.EXPAND |
86+
wx.LEFT | wx.RIGHT, border=self.border)
87+
sizer.Add(self.layoutPH(), flag=wx.EXPAND |
88+
wx.LEFT | wx.RIGHT, border=self.border)
7489
return sizer
7590

7691
def layoutTemp(self):
7792
sizer = wx.StaticBoxSizer(
78-
wx.VERTICAL, self.panel, label="Tank Temp")
93+
wx.VERTICAL, self.panel, label="Temperature Probe")
7994
temp = wx.TextCtrl(
80-
self.panel, value='12.345', style=wx.TE_RIGHT)
95+
self.panel, value='12.345', style=wx.TE_RIGHT,
96+
size=self.FromDIP(wx.Size(120, 24)))
8197
temp.Bind(wx.EVT_TEXT, self.onTempChanged)
8298
font = wx.Font(18, wx.FONTFAMILY_TELETYPE,
8399
wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL)
84100
temp.SetFont(font)
85-
sizer.Add(temp, flag=wx.EXPAND | wx.LEFT | wx.RIGHT, border=5)
101+
sizer.Add(temp, flag=wx.EXPAND | wx.LEFT |
102+
wx.RIGHT, border=self.border)
86103
return sizer
87104

88105
def layoutPH(self):
89106
sizer = wx.StaticBoxSizer(
90-
wx.VERTICAL, self.panel, label="Tank pH")
107+
wx.VERTICAL, self.panel, label="pH Probe")
91108
ph = wx.TextCtrl(
92-
self.panel, value='8.1234', style=wx.TE_RIGHT)
109+
self.panel, value='8.1234', style=wx.TE_RIGHT,
110+
size=self.FromDIP(wx.Size(120, 24)))
93111
ph.Bind(wx.EVT_TEXT, self.onPHChanged)
94112
font = wx.Font(18, wx.FONTFAMILY_TELETYPE,
95113
wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL)
96114
ph.SetFont(font)
97-
sizer.Add(ph, flag=wx.EXPAND | wx.LEFT | wx.RIGHT, border=5)
115+
sizer.Add(ph, flag=wx.EXPAND | wx.LEFT | wx.RIGHT, border=self.border)
98116
return sizer
99117

100118
def layoutDevice(self):
101119
sizer = wx.StaticBoxSizer(
102120
wx.VERTICAL, self.panel, label="Tank Controller v" + libTC.version())
103-
sizer.Add(self.layoutDisplay(), flag=wx.EXPAND | wx.LEFT | wx.RIGHT, border=5)
104-
sizer.Add(self.layoutKeypad(), flag=wx.EXPAND | wx.LEFT | wx.RIGHT, border=5)
121+
sizer.Add(self.layoutDisplay(), flag=wx.EXPAND |
122+
wx.LEFT | wx.RIGHT, border=self.border)
123+
sizer.Add(self.layoutKeypad(), flag=wx.EXPAND |
124+
wx.LEFT | wx.RIGHT, border=self.border)
105125
return sizer
106126

107127
def layoutDisplay(self):
108-
sizer = wx.StaticBoxSizer(wx.HORIZONTAL, self.panel)
109-
sizer.Add(self.layoutLQD(), flag=wx.EXPAND | wx.LEFT | wx.RIGHT, border=5)
110-
sizer.Add(self.layoutPins(), flag=wx.EXPAND | wx.LEFT | wx.RIGHT, border=5)
128+
sizer = wx.BoxSizer(wx.HORIZONTAL)
129+
sizer.Add(self.layoutLQD(), flag=wx.EXPAND |
130+
wx.LEFT | wx.RIGHT, border=self.border)
131+
sizer.Add(self.layoutPins(), flag=wx.EXPAND |
132+
wx.LEFT | wx.RIGHT, border=self.border)
111133
return sizer
112134

113135
def layoutLQD(self):
114-
sizer = wx.StaticBoxSizer(
115-
wx.VERTICAL, self.panel, label="Liquid Crystal")
136+
sizer = wx.StaticBoxSizer(wx.VERTICAL, self.panel)
116137
self.lqd = wx.StaticText(
117138
self.panel, label=libTC.lcd(0) + '\n' + libTC.lcd(1))
118139
font = wx.Font(22, wx.FONTFAMILY_TELETYPE,
119140
wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL)
120141
self.lqd.SetFont(font)
121-
sizer.Add(self.lqd, flag=wx.EXPAND | wx.LEFT | wx.RIGHT, border=5)
142+
sizer.Add(self.lqd, flag=wx.EXPAND | wx.LEFT |
143+
wx.RIGHT, border=self.border)
122144
return sizer
123145

124146
def layoutPins(self):
125-
sizer = wx.StaticBoxSizer(wx.VERTICAL, self.panel, label="Pins")
147+
sizer = wx.StaticBoxSizer(wx.VERTICAL, self.panel)
126148
self.pins = wx.StaticText(
127149
self.panel, label='LED: OFF\nHEAT: OFF\nCO2: OFF')
128150
font = wx.Font(15, wx.FONTFAMILY_TELETYPE,
129151
wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL)
130152
self.pins.SetFont(font)
131-
sizer.Add(self.pins, flag=wx.EXPAND | wx.LEFT | wx.RIGHT, border=5)
153+
sizer.Add(self.pins, flag=wx.EXPAND | wx.LEFT |
154+
wx.RIGHT, border=self.border)
132155
return sizer
133156

134157
def layoutKeypad(self):
135158
labels = ['1', '2', '3', 'A',
136159
'4', '5', '6', 'B',
137160
'7', '8', '9', 'C',
138161
'*', '0', '#', 'D']
139-
sizer = wx.StaticBoxSizer(wx.VERTICAL, self.panel, label="Keypad")
162+
sizer = wx.StaticBoxSizer(wx.VERTICAL, self.panel)
140163
keypadGrid = wx.FlexGridSizer(4, 4, 5) # rows, cols, gap
141164
for each in labels:
142-
button = wx.Button(self.panel, label=each)
165+
button = wx.Button(self.panel, label=each,
166+
size=self.FromDIP(wx.Size(76, 25)))
143167
button.Bind(wx.EVT_LEFT_UP, self.KeypadEvent)
144-
keypadGrid.Add(button, 0, flag=wx.EXPAND)
145-
sizer.Add(keypadGrid, flag=wx.EXPAND | wx.LEFT | wx.RIGHT, border=5)
168+
keypadGrid.Add(button, 1, flag=wx.EXPAND)
169+
sizer.Add(keypadGrid, flag=wx.EXPAND | wx.LEFT |
170+
wx.RIGHT, border=self.border)
146171
return sizer
147172

148173
def layoutEEPROM(self):
@@ -155,31 +180,38 @@ def layoutEEPROM(self):
155180
'Temp Interval', 'Temp Delay', 'Google Sheet Mins']
156181
sizer = wx.StaticBoxSizer(
157182
wx.HORIZONTAL, self.panel, label="EEPROM")
158-
leftSizer = wx.StaticBoxSizer(wx.VERTICAL, self.panel)
159-
centerSizer = wx.StaticBoxSizer(wx.VERTICAL, self.panel)
160-
rightSizer = wx.StaticBoxSizer(wx.VERTICAL, self.panel)
183+
leftSizer = wx.BoxSizer(wx.VERTICAL)
184+
centerSizer = wx.BoxSizer(wx.VERTICAL)
185+
rightSizer = wx.BoxSizer(wx.VERTICAL)
161186
currentColumn = leftSizer
162187
for i, each in enumerate(labels):
163188
box = wx.StaticBoxSizer(wx.HORIZONTAL, self.panel, label=each)
164-
value = wx.StaticText(self.panel, label="nan")
165-
box.Add(value, flag=wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM, border=5)
189+
value = wx.StaticText(self.panel,
190+
size=self.FromDIP(wx.Size(100, 16)))
191+
box.Add(value, flag=wx.EXPAND | wx.LEFT |
192+
wx.RIGHT | wx.BOTTOM, border=self.border)
166193
if i >= len(labels) / 3 * 2:
167194
currentColumn = rightSizer
168195
elif i >= len(labels) / 3:
169196
currentColumn = centerSizer
170-
currentColumn.Add(box, flag=wx.EXPAND | wx.LEFT | wx.RIGHT, border=10)
197+
currentColumn.Add(box, flag=wx.EXPAND |
198+
wx.LEFT | wx.RIGHT, border=10)
171199
self.eeprom.append(value)
172-
sizer.Add(leftSizer, flag=wx.EXPAND | wx.LEFT | wx.RIGHT, border=5)
173-
sizer.Add(centerSizer, flag=wx.EXPAND | wx.LEFT | wx.RIGHT, border=5)
174-
sizer.Add(rightSizer, flag=wx.EXPAND | wx.LEFT | wx.RIGHT, border=5)
200+
sizer.Add(leftSizer, flag=wx.EXPAND | wx.LEFT |
201+
wx.RIGHT, border=self.border)
202+
sizer.Add(centerSizer, flag=wx.EXPAND |
203+
wx.LEFT | wx.RIGHT, border=self.border)
204+
sizer.Add(rightSizer, flag=wx.EXPAND | wx.LEFT |
205+
wx.RIGHT, border=self.border)
175206
return sizer
176207

177208
def layoutSerial(self):
178209
sizer = wx.StaticBoxSizer(
179210
wx.VERTICAL, self.panel, label="Serial Log")
180-
self.console = wx.TextCtrl(self.panel, size=(1000, 1000),
211+
self.console = wx.TextCtrl(self.panel, size=self.FromDIP(wx.Size(800, 200)),
181212
style=wx.TE_READONLY | wx.TE_MULTILINE | wx.HSCROLL)
182-
sizer.Add(self.console, flag=wx.EXPAND | wx.LEFT | wx.RIGHT, border=5)
213+
sizer.Add(self.console, flag=wx.EXPAND |
214+
wx.LEFT | wx.RIGHT, border=self.border)
183215
return sizer
184216

185217
def updateDisplay(self):

0 commit comments

Comments
 (0)