Skip to content

Commit 21a1199

Browse files
committed
Code files
Tkinter GUI Programming by Example, published by Packt
1 parent 3d6bba8 commit 21a1199

File tree

145 files changed

+6234
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

145 files changed

+6234
-0
lines changed

Chapter01/Ch1/ch1-1.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import tkinter as tk
2+
3+
class Window(tk.Tk):
4+
def __init__(self):
5+
super().__init__()
6+
self.title("Hello Tkinter")
7+
8+
label = tk.Label(self, text="Hello World!")
9+
label.pack(fill=tk.BOTH, expand=1, padx=100, pady=50)
10+
11+
12+
if __name__ == "__main__":
13+
window = Window()
14+
window.mainloop()
15+

Chapter01/Ch1/ch1-2.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import tkinter as tk
2+
3+
class Window(tk.Tk):
4+
def __init__(self):
5+
super().__init__()
6+
self.title("Hello Tkinter")
7+
8+
self.label = tk.Label(self, text="Choose One")
9+
self.label.pack(fill=tk.BOTH, expand=1, padx=100, pady=30)
10+
11+
hello_button = tk.Button(self, text="Say Hello", command=self.say_hello)
12+
hello_button.pack(side=tk.LEFT, padx=(20, 0), pady=(0, 20))
13+
14+
goodbye_button = tk.Button(self, text="Say Goodbye", command=self.say_goodbye)
15+
goodbye_button.pack(side=tk.RIGHT, padx=(0, 20), pady=(0, 20))
16+
17+
def say_hello(self):
18+
self.label.configure(text="Hello World!")
19+
20+
def say_goodbye(self):
21+
self.label.configure(text="Goodbye! \n (Closing in 2 seconds)")
22+
self.after(2000, self.destroy)
23+
24+
25+
if __name__ == "__main__":
26+
window = Window()
27+
window.mainloop()
28+

Chapter01/Ch1/ch1-3.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import tkinter as tk
2+
3+
class Window(tk.Tk):
4+
def __init__(self):
5+
super().__init__()
6+
self.title("Hello Tkinter")
7+
self.label_text = tk.StringVar()
8+
self.label_text.set("Choose One")
9+
10+
self.label = tk.Label(self, textvar=self.label_text)
11+
self.label.pack(fill=tk.BOTH, expand=1, padx=100, pady=30)
12+
13+
hello_button = tk.Button(self, text="Say Hello", command=self.say_hello)
14+
hello_button.pack(side=tk.LEFT, padx=(20, 0), pady=(0, 20))
15+
16+
goodbye_button = tk.Button(self, text="Say Goodbye", command=self.say_goodbye)
17+
goodbye_button.pack(side=tk.RIGHT, padx=(0, 20), pady=(0, 20))
18+
19+
def say_hello(self):
20+
self.label_text.set("Hello World")
21+
22+
def say_goodbye(self):
23+
self.label_text.set("Goodbye! \n (Closing in 2 seconds)")
24+
self.after(2000, self.destroy)
25+
26+
27+
if __name__ == "__main__":
28+
window = Window()
29+
window.mainloop()
30+

Chapter01/Ch1/ch1-4.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import tkinter as tk
2+
import tkinter.messagebox as msgbox
3+
4+
class Window(tk.Tk):
5+
def __init__(self):
6+
super().__init__()
7+
self.title("Hello Tkinter")
8+
self.label_text = tk.StringVar()
9+
self.label_text.set("Choose One")
10+
11+
self.label = tk.Label(self, textvar=self.label_text)
12+
self.label.pack(fill=tk.BOTH, expand=1, padx=100, pady=30)
13+
14+
hello_button = tk.Button(self, text="Say Hello", command=self.say_hello)
15+
hello_button.pack(side=tk.LEFT, padx=(20, 0), pady=(0, 20))
16+
17+
goodbye_button = tk.Button(self, text="Say Goodbye", command=self.say_goodbye)
18+
goodbye_button.pack(side=tk.RIGHT, padx=(0, 20), pady=(0, 20))
19+
20+
def say_hello(self):
21+
msgbox.showinfo("Hello", "Hello World!")
22+
23+
def say_goodbye(self):
24+
self.label_text.set("Window will close in 2 seconds")
25+
msgbox.showinfo("Goodbye!", "Goodbye, it's been fun!")
26+
self.after(2000, self.destroy)
27+
28+
29+
if __name__ == "__main__":
30+
window = Window()
31+
window.mainloop()
32+

Chapter01/Ch1/ch1-5.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import tkinter as tk
2+
import tkinter.messagebox as msgbox
3+
4+
class Window(tk.Tk):
5+
def __init__(self):
6+
super().__init__()
7+
self.title("Hello Tkinter")
8+
self.label_text = tk.StringVar()
9+
self.label_text.set("Choose One")
10+
11+
self.label = tk.Label(self, textvar=self.label_text)
12+
self.label.pack(fill=tk.BOTH, expand=1, padx=100, pady=30)
13+
14+
hello_button = tk.Button(self, text="Say Hello", command=self.say_hello)
15+
hello_button.pack(side=tk.LEFT, padx=(20, 0), pady=(0, 20))
16+
17+
goodbye_button = tk.Button(self, text="Say Goodbye", command=self.say_goodbye)
18+
goodbye_button.pack(side=tk.RIGHT, padx=(0, 20), pady=(0, 20))
19+
20+
def say_hello(self):
21+
msgbox.showinfo("Hello", "Hello World!")
22+
23+
def say_goodbye(self):
24+
if msgbox.askyesno("Close Window?", "Would you like to close this window?"):
25+
self.label_text.set("Window will close in 2 seconds")
26+
self.after(2000, self.destroy)
27+
else:
28+
msgbox.showinfo("Not Closing", "Great! This window will stay open.")
29+
30+
31+
if __name__ == "__main__":
32+
window = Window()
33+
window.mainloop()
34+

Chapter01/Ch1/ch1-6.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import tkinter as tk
2+
import tkinter.messagebox as msgbox
3+
4+
class Window(tk.Tk):
5+
def __init__(self):
6+
super().__init__()
7+
self.title("Hello Tkinter")
8+
self.label_text = tk.StringVar()
9+
self.label_text.set("My Name Is: ")
10+
11+
self.name_text = tk.StringVar()
12+
13+
self.label = tk.Label(self, textvar=self.label_text)
14+
self.label.pack(fill=tk.BOTH, expand=1, padx=100, pady=10)
15+
16+
self.name_entry = tk.Entry(self, textvar=self.name_text)
17+
self.name_entry.pack(fill=tk.BOTH, expand=1, padx=20, pady=20)
18+
19+
hello_button = tk.Button(self, text="Say Hello", command=self.say_hello)
20+
hello_button.pack(side=tk.LEFT, padx=(20, 0), pady=(0, 20))
21+
22+
goodbye_button = tk.Button(self, text="Say Goodbye", command=self.say_goodbye)
23+
goodbye_button.pack(side=tk.RIGHT, padx=(0, 20), pady=(0, 20))
24+
25+
def say_hello(self):
26+
message = "Hello there " + self.name_entry.get()
27+
msgbox.showinfo("Hello", message)
28+
29+
def say_goodbye(self):
30+
if msgbox.askyesno("Close Window?", "Would you like to close this window?"):
31+
message = "Window will close in 2 seconds - goodybye " + self.name_entry.get()
32+
self.label_text.set(message)
33+
self.after(2000, self.destroy)
34+
else:
35+
msgbox.showinfo("Not Closing", "Great! This window will stay open.")
36+
37+
38+
if __name__ == "__main__":
39+
window = Window()
40+
window.mainloop()
41+

Chapter02/Ch2/Ch2-class-2.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
class Dog:
2+
def __init__(self, name):
3+
self.name = name
4+
5+
def speak(self):
6+
print("Woof! My name is", self.name)
7+
8+
9+
class Greyhound(Dog):
10+
def __init__(self, name):
11+
super().__init__(name)
12+
13+
def speak(self):
14+
print("Zoom! My name is", self.name)
15+
16+
def race(self, opponent):
17+
print(self.name, "is running faster than", opponent.name)
18+
19+
class JackRussell(Dog):
20+
def __init__(self, name, color):
21+
super().__init__(name)
22+
23+
self.color = color
24+
25+
def get_color(self):
26+
print(self.name, "is", self.color)
27+
28+
29+
greyhound = Greyhound("Tessa")
30+
jack_russell = JackRussell("Jack", "brown")
31+
dog = Dog("Boris")
32+
33+
greyhound.speak()
34+
jack_russell.speak()
35+
dog.speak()
36+
37+
greyhound.race(jack_russell)
38+
greyhound.race(dog)
39+
40+
jack_russell.get_color()
41+

Chapter02/Ch2/Ch2-class.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
class Dog:
2+
def __init__(self, name):
3+
self.name = name
4+
5+
def speak(self):
6+
print("Woof! My name is", self.name)
7+
8+
9+
dog_one = Dog('Rover')
10+
dog_two = Dog('Rex')
11+
12+
dog_one.speak()
13+
dog_two.speak()

Chapter02/Ch2/ch2.py

Lines changed: 155 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,155 @@
1+
import random
2+
3+
4+
class Card:
5+
def __init__(self, suit, value):
6+
self.suit = suit
7+
self.value = value
8+
9+
def __repr__(self):
10+
return " of ".join((self.value, self.suit))
11+
12+
13+
class Deck:
14+
def __init__(self):
15+
self.cards = [Card(s, v) for s in ["Spades", "Clubs", "Hearts", "Diamonds"] for v in
16+
["A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"]]
17+
18+
def shuffle(self):
19+
if len(self.cards) > 1:
20+
random.shuffle(self.cards)
21+
22+
def deal(self):
23+
if len(self.cards) > 1:
24+
return self.cards.pop(0)
25+
26+
27+
class Hand:
28+
def __init__(self, dealer=False):
29+
self.dealer = dealer
30+
self.cards = []
31+
self.value = 0
32+
33+
def add_card(self, card):
34+
self.cards.append(card)
35+
36+
def calculate_value(self):
37+
self.value = 0
38+
has_ace = False
39+
for card in self.cards:
40+
if card.value.isnumeric():
41+
self.value += int(card.value)
42+
else:
43+
if card.value == "A":
44+
has_ace = True
45+
self.value += 11
46+
else:
47+
self.value += 10
48+
49+
if has_ace and self.value > 21:
50+
self.value -= 10
51+
52+
def get_value(self):
53+
self.calculate_value()
54+
return self.value
55+
56+
def display(self):
57+
if self.dealer:
58+
print("hidden")
59+
print(self.cards[1])
60+
else:
61+
for card in self.cards:
62+
print(card)
63+
print("Value:", self.get_value())
64+
65+
66+
class Game:
67+
def __init__(self):
68+
playing = True
69+
70+
while playing:
71+
self.deck = Deck()
72+
self.deck.shuffle()
73+
74+
self.player_hand = Hand()
75+
self.dealer_hand = Hand(dealer=True)
76+
77+
for i in range(2):
78+
self.player_hand.add_card(self.deck.deal())
79+
self.dealer_hand.add_card(self.deck.deal())
80+
81+
print("Your hand is:")
82+
self.player_hand.display()
83+
print()
84+
print("Dealer's hand is:")
85+
self.dealer_hand.display()
86+
87+
game_over = False
88+
89+
while not game_over:
90+
player_has_blackjack, dealer_has_blackjack = self.check_for_blackjack()
91+
if player_has_blackjack or dealer_has_blackjack:
92+
game_over = True
93+
self.show_blackjack_results(player_has_blackjack, dealer_has_blackjack)
94+
continue
95+
96+
choice = input("Please choose [Hit / Stick] ").lower()
97+
while choice not in ["h", "s", "hit", "stick"]:
98+
choice = input("Please enter 'hit' or 'stick' (or H/S) ").lower()
99+
if choice in ['hit', 'h']:
100+
self.player_hand.add_card(self.deck.deal())
101+
self.player_hand.display()
102+
if self.player_is_over():
103+
print("You have lost!")
104+
game_over = True
105+
else:
106+
player_hand_value = self.player_hand.get_value()
107+
dealer_hand_value = self.dealer_hand.get_value()
108+
109+
print("Final Results")
110+
print("Your hand:", player_hand_value)
111+
print("Dealer's hand:", dealer_hand_value)
112+
113+
if player_hand_value > dealer_hand_value:
114+
print("You Win!")
115+
elif player_hand_value == dealer_hand_value:
116+
print("Tie!")
117+
else:
118+
print("Dealer Wins!")
119+
game_over = True
120+
121+
again = input("Play Again? [Y/N] ")
122+
while again.lower() not in ["y", "n"]:
123+
again = input("Please enter Y or N ")
124+
if again.lower() == "n":
125+
print("Thanks for playing!")
126+
playing = False
127+
else:
128+
game_over = False
129+
130+
def player_is_over(self):
131+
return self.player_hand.get_value() > 21
132+
133+
def check_for_blackjack(self):
134+
player = False
135+
dealer = False
136+
if self.player_hand.get_value() == 21:
137+
player = True
138+
if self.dealer_hand.get_value() == 21:
139+
dealer = True
140+
141+
return player, dealer
142+
143+
def show_blackjack_results(self, player_has_blackjack, dealer_has_blackjack):
144+
if player_has_blackjack and dealer_has_blackjack:
145+
print("Both players have blackjack! Draw!")
146+
147+
elif player_has_blackjack:
148+
print("You have blackjack! You win!")
149+
150+
elif dealer_has_blackjack:
151+
print("Dealer has blackjack! Dealer wins!")
152+
153+
154+
if __name__ == "__main__":
155+
g = Game()

0 commit comments

Comments
 (0)