View difference between Paste ID: 5tCj2q06 and Wmebr598
SHOW: | | - or go back to the newest paste.
1
try:
2
    from tkinter import *
3
except:
4
    from Tkinter import *
5
6
import random
7
8
class Application:
9
    concat = []
10
    inputList = [] # Gets the input from the keypad and the answer text
11
    callIf = [True] # Checks if the countdown is at zero and allows other functions to be called when condition is met
12
    bit = {} # Dictonary that houses the bits
13
    bitList = [] # List that takes data from the bit dictionary and passes it to the tkinter Labels
14
    byteCache = '' # Stores the byte so it can be compared to the answerbyte and no errors are made in the comparison
15
    score = 0 # Keeps the score of when the user gets a byte right
16
    
17
    def __init__(self):
18
        
19
        master.wm_title("Binary Math") # Sets name of the Window
20
    
21
    def countdown(self, number):
22
        
23
        number -= 1 # subtracts 1 from number for countdown 
24
        
25
        self.timeText_n.config(text=number) # Sets text to variable number
26
        
27
        if number <=0: # Checks If timer is less than or equal to zero 
28
            self.timeText_n.config(text='Times Up!') # Changes text
29
            Application.callIf[0] = True # Changes the callIf to false to not let any other functions be calls and not allow user to do things that are not intended
30
            
31
            for i in range(0,8): # Sets everything in bitList to 0
32
                self.bitList[i] = 0
33
                
34
            Application.setText(self) # Sets all the text to 0 of the binaryBoxes
35
        
36
        else:  
37
            master.after(1000, self.countdown, number) # If timer is not less then zero it counts until it is zero
38
            Application.callIf[0] = False
39
    
40
    def randomByte(self):  # Function that randomly creates 8 bits and stores them in the dictionary 'bit' which parses it then sends parsed strings into list 'bitList'
41
        
42
        if Application.callIf[0] == True: 
43
            
44
            try:
45
                self.bitList.clear() # Clears anything that may be in the bitList
46
            except:
47
                self.bitList[:]=[]
48
            
49
            for i in range(0,8): # Loops that sets dictionary of bit[1-7] then sets bitList[1-7] to the value in each dictionary spot
50
                self.bit['bit' + str(i)] = random.randint(0,1)
51
                self.bitList.append(str(self.bit['bit' + str(i)]))  
52
            Application.byteCache = ''.join(self.bitList) # Saves the byte to byteCache to be used later and not cause any unintended errors
53
            print(self.bit)
54
            print(self.bitList)
55
            print(Application.byteCache)
56
        
57
    def setText(self):   # Function sets the text when the start button is clicked    
58
        
59
        textvar1 = self.bitList[0] # Sets the text of text variable to the 1 or 0 generated in randomByte
60
        self.binary_text_var1.set(textvar1) # Sets the text to the text variable
61
        print(str(self.bitList[0]))
62
        
63
        textvar2 = self.bitList[1]
64
        self.binary_text_var2.set(textvar2)
65
        print(str(self.bitList[1]))
66
        
67
        textvar3 = self.bitList[2]
68
        self.binary_text_var3.set(textvar3)
69
        print(str(self.bitList[2]))
70
        
71
        textvar4 = self.bitList[3]
72
        self.binary_text_var4.set(textvar4)
73
        print(str(self.bitList[3]))
74
        
75
        textvar5 = self.bitList[4]
76
        self.binary_text_var5.set(textvar5)
77
        print(str(self.bitList[4]))
78
        
79
        textvar6 = self.bitList[5]
80
        self.binary_text_var6.set(textvar6)
81
        print(str(self.bitList[5]))
82
        
83
        textvar7 = self.bitList[6]
84
        self.binary_text_var7.set(textvar7)
85
        print(str(self.bitList[6]))
86
        
87
        textvar8 = self.bitList[7]
88
        self.binary_text_var8.set(textvar8)
89
        print(str(self.bitList[7]))
90
        
91
    def callFunctions(self): # Calls on both randomByte and setText functions
92
        
93
        Application.randomByte(self)
94
        Application.setText(self)
95
        
96
        if Application.callIf[0] == True: # Calls if countdown has already reached 0
97
            Application.countdown(self, 6)
98
                 
99
    def inputFunctions(self, button):
100
        
101
        if Application.callIf[0] == True: # Only lets input if countdown is equal to 0
102
      
103
            Application.inputList.append(button)
104
            self.concat = ''.join(Application.inputList) # Concatenates the numbers in the inputList to a single number
105
            self.buttonNumber = self.concat # Sets buttonNumber equal to the joined numbers
106
            self.answerText.config(text=self.buttonNumber) # Sets the text to the buttonNumber
107
        
108
    def clearInput(self): # Allows the input to be cleared with the clear button 
109
        
110
        try:
111
            Application.inputList.clear() #Clerars the inputList
112
        except:
113
            self.inputList[:] = []
114
        
115
        self.buttonNumber = '0' # Sets buttonNumber to an empty string 
116
        self.answerText.config(text=self.buttonNumber) # Sets the texty to the empt y string
117
        
118
    def enterButton(self):
119
        
120
        fullByte = int(Application.byteCache, 2) # Grabs the fullbyte from the byteCache
121
        answerByte = self.concat # Sets answerByte to the concatenated number
122
        print(fullByte)
123
        print(answerByte )
124
        
125
        if fullByte == int(answerByte): # Checks if the answer is the same as the binary number shown on display
126
            Application.score += 1 # Adds score plus 1
127
            self.scoreText.config(text='Score:' + str(Application.score)) # Sets text of score
128
            
129
            Application.callFunctions(self) # Calls on function to allow another byte to be solved by the user
130
        
131
    
132
    '''def toolBar(self, master): # Creates the toolbar as well as the dropdown menu
133
        
134
        self.selectionMenu = Menu(master)
135
        master.config(menu=self.selectionMenu)
136
            
137
        self.menuParams = Menu(self.selectionMenu)
138
        self.selectionMenu.add_cascade(label='Options', menu=self.menuParams)
139
        self.menuParams.add_command(label='About')'''
140
        
141
    def restartGame(self): # Allows user to restart game if stuck on problem
142
    
143
        Application.score = 0 # Sets score back to zero
144
        self.scoreText.config(text='Score:' + str(Application.score)) # Sets text to zero
145
        
146
        Application.clearInput(self) # Clears the input
147
        
148
        for i in range(0,8): # Clears the list
149
                self.bitList[i] = 0
150
                
151
        Application.setText(self) # sets text for boxes back to zero
152
    
153
    
154
    def topElements(self, master): # Creates the top elements such as the top frame and the time text for when the timer counts down for a visual
155
        
156
        self.topFrame = Frame(master) # Frame that houses the top elements
157
        self.topFrame.grid(row=0, column = 0, sticky='w')
158
159
        self.timeText = Label(self.topFrame, text='Time:')
160
        self.timeText.grid()
161
        
162
        self.timeText_n = Label(self.topFrame, text=0)
163
        self.timeText_n.grid(row=0, column=1)
164
        
165
        self.topFrame_Clear = Frame(master)
166
        self.topFrame_Clear.grid(row=0, sticky='e')
167
        
168
        self.clearButton = Button(self.topFrame_Clear, text='Clear', command=lambda : Application.clearInput(self))
169
        self.clearButton.grid()
170
        
171
    def binaryBox_frame(self, master): # Creates the textboxes that show the binary numbers 
172
     
173
        self.binaryFrame = Frame(master) # Frame that houses the binary Elements
174
        self.binaryFrame.grid(row=1)
175
             
176
        self.binary_text_var1 = StringVar() # binary text variable set as object from tkinter
177
        self.binary_text_var1.set('0') # Sets default of 0
178
        self.binaryLabel1 = Label(self.binaryFrame, textvariable=self.binary_text_var1, borderwidth=5, relief='ridge',)
179
        self.binaryLabel1.grid(row=0, column=0)
180
        self.binaryLabel1.config(font=('Courier', 25)) # Size and font type of the text
181
        
182
        self.binary_text_var2 = StringVar()
183
        self.binary_text_var2.set('0')
184
        self.binaryLabel2 = Label(self.binaryFrame, textvariable=self.binary_text_var2, borderwidth=5, relief='ridge')
185
        self.binaryLabel2.grid(row=0, column=1)
186
        self.binaryLabel2.config(font=('Courier', 25))
187
        
188
        self.binary_text_var3 = StringVar()
189
        self.binary_text_var3.set('0')
190
        self.binaryLabel3 = Label(self.binaryFrame, textvariable=self.binary_text_var3, borderwidth=5, relief='ridge')
191
        self.binaryLabel3.grid(row=0, column=2)
192
        self.binaryLabel3.config(font=('Courier', 25))
193
        
194
        self.binary_text_var4 = StringVar()
195
        self.binary_text_var4.set('0')
196
        self.binaryLabel4 = Label(self.binaryFrame, textvariable=self.binary_text_var4, borderwidth=5, relief='ridge')
197
        self.binaryLabel4.grid(row=0, column=3)
198
        self.binaryLabel4.config(font=('Courier', 25))
199
        
200
        self.binary_text_var5 = StringVar()
201
        self.binary_text_var5.set('0')
202
        self.binaryLabel5 = Label(self.binaryFrame, textvariable=self.binary_text_var5, borderwidth=5, relief='ridge')
203
        self.binaryLabel5.grid(row=0, column=4)
204
        self.binaryLabel5.config(font=('Courier', 25))
205
        
206
        self.binary_text_var6 = StringVar()
207
        self.binary_text_var6.set('0')
208
        self.binaryLabel6 = Label(self.binaryFrame, textvariable=self.binary_text_var6, borderwidth=5, relief='ridge')
209
        self.binaryLabel6.grid(row=0, column=5)
210
        self.binaryLabel6.config(font=('Courier', 25))
211
         
212
        self.binary_text_var7 = StringVar()
213
        self.binary_text_var7.set('0')
214
        self.binaryLabel7 = Label(self.binaryFrame, textvariable=self.binary_text_var7, borderwidth=5, relief='ridge')
215
        self.binaryLabel7.grid(row=0, column=6)
216
        self.binaryLabel7.config(font=('Courier', 25))
217
            
218
        self.binary_text_var8 = StringVar()
219
        self.binary_text_var8.set('0')
220
        self.binaryLabel8 = Label(self.binaryFrame, textvariable=self.binary_text_var8, borderwidth=5, relief='ridge')
221
        self.binaryLabel8.grid(row=0, column=7)
222
        self.binaryLabel8.config(font=('Courier', 25))
223
        
224
    def bottomElements(self, master): # Creates the bottom elements such as the keypad and start and enter buttons
225
        
226
        self.bottomFrame = Frame(master) 
227
        self.bottomFrame.grid(row=2)
228
        
229
        self.answerText = Label(self.bottomFrame, text='', height=1, width=20, bg='white', relief='ridge')
230
        self.answerText.grid(row=0, column=4, columnspan=5, pady=5)
231
        
232
        self.button1= Button(self.bottomFrame, text = 1, height=2, width=5, command= lambda : Application.inputFunctions(self, '1'))
233
        self.button1.grid(row=1, column=5, sticky='e')
234
        
235
        self.button2 = Button(self.bottomFrame, text = 2, height=2, width=5, command= lambda : Application.inputFunctions(self, '2'))
236
        self.button2.grid(row=1, column=6)
237
        
238
        self.button3 = Button(self.bottomFrame, text = 3, height=2, width=5, command= lambda : Application.inputFunctions(self, '3'))
239
        self.button3.grid(row=1, column=7, sticky='w')
240
        
241
        self.button4 = Button(self.bottomFrame, text = 4, height=2, width=5, command= lambda : Application.inputFunctions(self, '4'))
242
        self.button4.grid(row=2, column=5, sticky='e')
243
        
244
        self.button5 = Button(self.bottomFrame, text = 5, height=2, width=5, command= lambda : Application.inputFunctions(self, '5'))
245
        self.button5.grid(row=2, column=6)
246
        
247
        self.button6 = Button(self.bottomFrame, text = 6, height=2, width=5, command= lambda : Application.inputFunctions(self, '6'))
248
        self.button6.grid(row=2, column=7, sticky='w')
249
        
250
        self.button7 = Button(self.bottomFrame, text = 7, height=2, width=5, command= lambda : Application.inputFunctions(self, '7'))
251
        self.button7.grid(row=3, column=5, sticky='e')
252
        
253
        self.button8 = Button(self.bottomFrame, text = 8, height=2, width=5, command= lambda : Application.inputFunctions(self, '8'))
254
        self.button8.grid(row=3, column=6)
255
        
256
        self.button9 = Button(self.bottomFrame, text = 9, height=2, width=5, command= lambda : Application.inputFunctions(self, '9'))
257
        self.button9.grid(row=3, column=7, sticky='w')
258
        
259
        self.buttonStart = Button(self.bottomFrame, text = 'Start', height=2, width=5, command= lambda : Application.callFunctions(self))
260
        self.buttonStart.grid(row=4, column=5, sticky='e')
261
        
262
        self.button0 = Button(self.bottomFrame, text = 0, height=2, width=5, command= lambda : Application.inputFunctions(self, '0'))
263
        self.button0.grid(row=4, column=6)
264
        
265
        self.buttonEnter = Button(self.bottomFrame, text = 'Enter', height=2, width=5, command= lambda : Application.enterButton(self))
266
        self.buttonEnter.grid(row=4, column=7, sticky='w')
267
        
268
        self.scoreText = Label(master, text='Score:')
269
        self.scoreText.grid(row=2, column=0, stick=W+S)
270
        
271
        restartButton = Button(master, text = 'Restart', height=1, width=4, command= lambda : Application.restartGame(self))
272
        restartButton.grid(row=2, column=0, sticky=E+S)
273
        
274
# Code below are objects that call on the functions in the class to use in tkinter for the GUI  
275
        
276
master = Tk()
277
278
binaryGame = Application()
279
280
'''binaryGame.toolBar(master)'''
281
282
binaryGame.topElements(master)
283
284
binaryGame.binaryBox_frame(master)
285
286
binaryGame.bottomElements(master)
287
288
master.mainloop()