Skip to content

Commit 04d43d2

Browse files
committed
fixes following ch15 revision
1 parent 21befa5 commit 04d43d2

File tree

5 files changed

+44
-33
lines changed

5 files changed

+44
-33
lines changed

Chapter15/ABQ_Data_Entry/abq_data_entry/application.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
from . import models as m
1313
from .mainmenu import get_main_menu_for_os
1414
from . import images
15-
from . import network as n
1615

1716

1817
class Application(tk.Tk):
@@ -502,7 +501,7 @@ def show_yield_chart(self, *_):
502501
popup = tk.Toplevel()
503502
chart = v.YieldChartView(
504503
popup,
505-
'Average plot humidity', 'Average Plot temperature',
504+
'Average plot humidity', 'Average plot temperature',
506505
'Yield as a product of humidity and temperature'
507506
)
508507
chart.pack(fill='both', expand=True)

Chapter15/ABQ_Data_Entry/abq_data_entry/models.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,7 @@ def get_growth_by_lab(self):
203203

204204
def get_yield_by_plot(self):
205205
query = (
206-
'SELECT lab_id, plot, seed_sample, MAX(fruit) AS yield, '
206+
'SELECT seed_sample, MAX(fruit) AS yield, '
207207
'AVG(humidity) AS avg_humidity, '
208208
'AVG(temperature) AS avg_temperature '
209209
'FROM plot_checks WHERE NOT equipment_fault '

Chapter15/ABQ_Data_Entry/abq_data_entry/views.py

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -610,20 +610,24 @@ def __init__(
610610
)
611611
# Draw chart
612612
self.origin = (self.margin, view_height - self.margin)
613-
self.create_line(
614-
self.origin, (self.margin, self.margin), width=2
615-
)
613+
# X axis
616614
self.create_line(
617615
self.origin,
618616
(view_width - self.margin, view_height - self.margin)
619617
)
618+
# Y axis
619+
self.create_line(
620+
self.origin, (self.margin, self.margin), width=2
621+
)
622+
# X axis label
620623
self.create_text(
621624
(view_width // 2, view_height - self.margin),
622625
text=x_field, anchor='n'
623626
)
627+
# Y axis label
624628
self.create_text(
625-
(self.margin, view_height // 2),
626-
text=y_field, angle=90, anchor='s'
629+
(self.margin, view_height // 2),
630+
text=y_field, angle=90, anchor='s'
627631
)
628632
self.plot_area = tk.Canvas(
629633
self, background='#555',
@@ -635,8 +639,8 @@ def __init__(
635639

636640
# Draw legend and lines
637641
plot_names = sorted(set([
638-
row[self.plot_by_field]
639-
for row in self.data
642+
row[self.plot_by_field]
643+
for row in self.data
640644
]))
641645

642646
color_map = list(zip(plot_names, self.colors))
@@ -669,10 +673,11 @@ def _plot_line(self, data, color):
669673

670674
def _draw_legend(self, color_map):
671675
# determine legend
672-
y = 10
673-
for label, color in color_map:
674-
self.plot_area.create_text((10, y), text=label, fill=color, anchor='w')
675-
y += 20
676+
for i, (label, color) in enumerate(color_map):
677+
self.plot_area.create_text(
678+
(10, 10 + (i * 20)),
679+
text=label, fill=color, anchor='w'
680+
)
676681

677682

678683
class YieldChartView(tk.Frame):
@@ -692,10 +697,10 @@ def __init__(self, parent, x_axis, y_axis, title):
692697
self.scatter_labels = list()
693698

694699
def draw_scatter(self, data, color, label):
695-
x, y, s = zip(*data)
696-
s = [(x ** 2)//2 for x in s]
700+
x, y, size = zip(*data)
701+
scaled_size = [(s ** 2)//2 for s in size]
697702
scatter = self.axes.scatter(
698-
x, y, s,
703+
x, y, scaled_size,
699704
c=color, label=label, alpha=0.5
700705
)
701706
self.scatters.append(scatter)

Chapter15/bug_race.py

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,14 @@
1+
"""Bug Race
2+
3+
A demo for the Tkinter Canvas
4+
"""
5+
16
import tkinter as tk
27
from queue import Queue
38
from random import randint
49

510
class App(tk.Tk):
11+
"""Main application class"""
612

713
def __init__(self):
814
super().__init__()
@@ -29,14 +35,15 @@ def setup(self):
2935
Racer(self.canvas, 'red'),
3036
Racer(self.canvas, 'green')
3137
]
32-
self.check_for_winner()
38+
self.execute_frame()
3339

34-
def check_for_winner(self):
40+
def execute_frame(self):
3541
for racer in self.racers:
42+
racer.next_move()
3643
if self.finish_line in racer.overlapping:
3744
self.declare_winner(racer)
3845
return
39-
self.after(Racer.FRAME_RES, self.check_for_winner)
46+
self.after(Racer.FRAME_RES, self.execute_frame)
4047

4148
def declare_winner(self, racer):
4249

@@ -50,8 +57,7 @@ def declare_winner(self, racer):
5057
self.canvas.tag_bind(wintext, '<Button-1>', self.reset)
5158

5259
def reset(self, *args):
53-
for item in self.canvas.find_all():
54-
self.canvas.delete(item)
60+
self.canvas.delete('all')
5561
self.setup()
5662

5763

@@ -80,9 +86,8 @@ def __init__(self, canvas, color):
8086
(canvas.left + size, canvas.center_y + size),
8187
fill=color
8288
)
83-
self.animation_queue = Queue()
89+
self.movement_queue = Queue()
8490
self.plot_course()
85-
self.animate()
8691

8792
def plot_course(self):
8893
start_x = self.canvas.left
@@ -101,11 +106,10 @@ def plot_course(self):
101106
total_dx += dx
102107
total_dy += dy
103108

104-
def animate(self):
105-
if not self.animation_queue.empty():
106-
nextmove = self.animation_queue.get()
109+
def next_move(self):
110+
if not self.movement_queue.empty():
111+
nextmove = self.movement_queue.get()
107112
self.canvas.move(self.id, *nextmove)
108-
self.canvas.after(self.FRAME_RES, self.animate)
109113

110114
def queue_move(self, dx, dy, time):
111115
num_steps = time // self.FRAME_RES
@@ -114,7 +118,7 @@ def queue_move(self, dx, dy, time):
114118
self.partition(dy, num_steps))
115119

116120
for step in steps:
117-
self.animation_queue.put(step)
121+
self.movement_queue.put(step)
118122

119123
@property
120124
def overlapping(self):

Chapter15/canvas_scroll.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,23 +4,26 @@
44
# Create root and canvas
55
root = tk.Tk()
66

7+
width = 1024
8+
height = 768
9+
710
canvas = tk.Canvas(
811
root, background='black',
9-
width=1024, height=768,
12+
width=width, height=height,
1013
)
1114
canvas.grid(row=0, column=0)
1215

1316
# Draw stars
1417
colors = ['#FCC', '#CFC', '#CCF', '#FFC', '#FFF', '#CFF']
1518
for _ in range(1000):
16-
x = randint(0, 2048)
17-
y = randint(0, 1536)
19+
x = randint(0, width * 2)
20+
y = randint(0, height * 2)
1821
z = randint(1, 10)
1922
c = choice(colors)
2023
canvas.create_oval((x - z, y - z), (x + z, y + z), fill=c)
2124

2225
# configure the scroll region
23-
canvas.configure(scrollregion=(0, 0, 2048, 1536))
26+
canvas.configure(scrollregion=(0, 0, width * 2, height * 2))
2427

2528
# create scrollbars and connect to canvas
2629
xscroll = tk.Scrollbar(

0 commit comments

Comments
 (0)