Forum: PC-Programmierung Python, Typenkonversionsrechner (HEX;INT;FLOAT;ASCII;BIN), Tkinter, wie Code vereinfachen??
von
Matthias (Gast)
14.07.2020 19:16
Hallo zusammen,
Ich habe einen kleinen Rechner als Tkinter-Python-Script geschrieben,
welches die Eingabe von Hex, INT, FLOAT, ASCII und BIN-Werten und deren
Umrechnung in jeweils die anderen Format ermöglicht.
Zweifellos, es ist soch nicht ausgereift und bedarf daher allein noch
einiger Verbesserungen, wie z.b. einer Historie der letzten berechneten
Werte, die unten angehangen werden soll.
Dabei stoße ich nun auf das Problem den Code "Aufblähen" zu müssen.
Für einen kopierfähigen Eintrag nutze ich ein Label
label11 = Text(window, height=1, borderwidth=0,width=20,font=("Arial",
14))
label11.insert(1.0, "INTEGER")
label11.tag_configure('bold_italics',font=('Arial', 14,'bold',
'italic'))
label11.grid(row=1,column=1,padx=5, pady=5)
Dies braucht so 4 Zeilen. Allein um angelegt zu sein.
Wäre es nicht möglich die Labels in einer Schleife, welche die Matrix
durchitteriert automatisch mit Werten aus einer Liste anlegen zu lassen?
Dabei müsste der Instanzname "label11" jedoch durch einen Text in dieser
Liste angelegt werden, oder durch i,y der Schleifen der Feldanlage.
Generell sollten auch die anderen vielfach in Prinzip identisch auf alle
Labels angewandten anweisungen irgendwie reduziert werden...
Wie kann ich die Labels also automatisch anlegen lassen?
Habt ihr eine Idee?
Schöne Grüße,
Matthias
Hier Kurz der Code 1 import tkinter as tk
2 from tkinter import *
3 import struct
4 import binascii
5 import codecs
6 import struct
7 import ctypes
8 import binascii
9
10 def binary ( num ) :
11 return format ( struct . unpack ( ' ! I ' , struct . pack ( ' ! f ' , num ))[ 0 ], ' 032 b ' )
12
13
14 window = tk . Tk ()
15
16 input_width = 25
17
18 for i in range ( 8 ) :
19 for j in range ( 6 ) :
20 frame = tk . Frame (
21 master = window ,
22 relief = tk . RAISED ,
23 borderwidth = 1
24 )
25 frame . grid ( row = i , column = j , padx = 5 , pady = 5 )
26
27 #HEADLINE
28 label00 = tk . Label (
29 text = "Hexadecimal" ,
30 width = 16 ,
31 font = ( ' Arial ' , 14 ),
32 foreground = "black" , # Set the text color to white
33 )
34 label00 . grid ( row = 0 , column = 0 , padx = 5 , pady = 5 )
35
36 label01 = tk . Label (
37 text = "Integer" ,
38 width = 20 ,
39 font = ( ' Arial ' , 14 ),
40 foreground = "black" , # Set the text color to white
41 )
42 label01 . grid ( row = 0 , column = 1 , padx = 5 , pady = 5 )
43
44 label02 = tk . Label (
45 text = "Float" ,
46 width = 25 ,
47 font = ( ' Arial ' , 14 ),
48 foreground = "black" , # Set the text color to white
49 )
50 label02 . grid ( row = 0 , column = 2 , padx = 5 , pady = 5 )
51
52 label03 = tk . Label (
53 text = "ASCII" ,
54 width = 9 ,
55 font = ( ' Arial ' , 14 ),
56 foreground = "black" , # Set the text color to white
57 )
58 label03 . grid ( row = 0 , column = 3 , padx = 5 , pady = 5 )
59
60 label04 = tk . Label (
61 text = "BIN" ,
62 width = 64 ,
63 font = ( ' Arial ' , 14 ),
64 foreground = "black" , # Set the text color to white
65 )
66 label04 . grid ( row = 0 , column = 4 , padx = 5 , pady = 5 )
67 #ENDE-HEADLINE
68
69 #HEX-CALC
70 hexe = tk . Entry ( text = "ffff" , fg = "black" , bg = "yellow" , font = ( ' Courier ' , 14 ), width = 16 , borderwidth = 10 )
71 hexe . insert ( END , "ffff" )
72 hexe . grid ( row = 1 , column = 0 )
73
74 label11 = Text ( window , height = 1 , borderwidth = 0 , width = 20 , font = ( "Arial" , 14 ))
75 label11 . insert ( 1 . 0 , "INTEGER" )
76 label11 . tag_configure ( ' bold_italics ' , font = ( ' Arial ' , 14 , ' bold ' , ' italic ' ))
77 label11 . grid ( row = 1 , column = 1 , padx = 5 , pady = 5 )
78
79 label12 = Text ( window , height = 1 , borderwidth = 0 , width = 25 , font = ( "Arial" , 14 ))
80 label12 . insert ( 1 . 0 , "FLOAT" )
81 label12 . tag_configure ( ' bold_italics ' , font = ( ' Arial ' , 14 , ' bold ' , ' italic ' ))
82 label12 . grid ( row = 1 , column = 2 , padx = 5 , pady = 5 )
83
84 label13 = Text ( window , height = 1 , borderwidth = 0 , width = 9 , font = ( "Arial" , 14 ))
85 label13 . insert ( 1 . 0 , "ASCII" )
86 label13 . tag_configure ( ' bold_italics ' , font = ( ' Arial ' , 14 , ' bold ' , ' italic ' ))
87 label13 . grid ( row = 1 , column = 3 , padx = 5 , pady = 5 )
88
89 label14 = Text ( window , height = 1 , borderwidth = 0 , width = 64 , font = ( "Arial" , 14 ))
90 label14 . insert ( 1 . 0 , "BIN" )
91 label14 . tag_configure ( ' bold_italics ' , font = ( ' Arial ' , 14 , ' bold ' , ' italic ' ))
92 label14 . grid ( row = 1 , column = 4 , padx = 5 , pady = 5 )
93 #END HEX-CALC
94
95 #INT-CALC
96 label20 = Text ( window , height = 1 , borderwidth = 0 , width = 16 , font = ( "Arial" , 14 ))
97 label20 . insert ( 1 . 0 , "HEX" )
98 label20 . tag_configure ( ' bold_italics ' , font = ( ' Arial ' , 14 , ' bold ' , ' italic ' ))
99 label20 . grid ( row = 2 , column = 0 , padx = 5 , pady = 5 )
100
101 inte = tk . Entry ( text = "100" , fg = "black" , bg = "yellow" , font = ( ' Courier ' , 14 ), width = 20 , borderwidth = 10 )
102 inte . insert ( END , "12345 " )
103 inte . grid ( row = 2 , column = 1 )
104
105 label22 = Text ( window , height = 1 , borderwidth = 0 , width = 25 , font = ( "Arial" , 14 ))
106 label22 . insert ( 1 . 0 , "FLOAT" )
107 label22 . tag_configure ( ' bold_italics ' , font = ( ' Arial ' , 14 , ' bold ' , ' italic ' ))
108 label22 . grid ( row = 2 , column = 2 , padx = 5 , pady = 5 )
109
110 label23 = Text ( window , height = 1 , borderwidth = 0 , width = 9 , font = ( "Arial" , 14 ))
111 label23 . insert ( 1 . 0 , "ASCII" )
112 label23 . tag_configure ( ' bold_italics ' , font = ( ' Arial ' , 14 , ' bold ' , ' italic ' ))
113 label23 . grid ( row = 2 , column = 3 , padx = 5 , pady = 5 )
114
115 label24 = Text ( window , height = 1 , borderwidth = 0 , width = 64 , font = ( "Arial" , 14 ))
116 label24 . insert ( 1 . 0 , "BIN" )
117 label24 . tag_configure ( ' bold_italics ' , font = ( ' Arial ' , 14 , ' bold ' , ' italic ' ))
118 label24 . grid ( row = 2 , column = 4 , padx = 5 , pady = 5 )
119 #END INT-CALC
120
121 #FLOAT-CALC
122 label30 = Text ( window , height = 1 , borderwidth = 0 , width = 16 , font = ( "Arial" , 14 ))
123 label30 . insert ( 1 . 0 , "HEX" )
124 label30 . tag_configure ( ' bold_italics ' , font = ( ' Arial ' , 14 , ' bold ' , ' italic ' ))
125 label30 . grid ( row = 3 , column = 0 , padx = 5 , pady = 5 )
126
127 label31 = Text ( window , height = 1 , borderwidth = 0 , width = 20 , font = ( "Arial" , 14 ))
128 label31 . insert ( 1 . 0 , "INTEGER" )
129 label31 . tag_configure ( ' bold_italics ' , font = ( ' Arial ' , 14 , ' bold ' , ' italic ' ))
130 label31 . grid ( row = 3 , column = 1 , padx = 5 , pady = 5 )
131
132 floate = tk . Entry ( text = "2.0" , fg = "black" , bg = "yellow" , font = ( ' Courier ' , 14 ), width = input_width , borderwidth = 10 )
133 floate . insert ( END , "3.5" )
134 floate . grid ( row = 3 , column = 2 )
135
136 label33 = Text ( window , height = 1 , borderwidth = 0 , width = 9 , font = ( "Arial" , 14 ))
137 label33 . insert ( 1 . 0 , "ASCII" )
138 label33 . tag_configure ( ' bold_italics ' , font = ( ' Arial ' , 14 , ' bold ' , ' italic ' ))
139 label33 . grid ( row = 3 , column = 3 , padx = 5 , pady = 5 )
140
141 label34 = Text ( window , height = 1 , borderwidth = 0 , width = 64 , font = ( "Arial" , 14 ))
142 label34 . insert ( 1 . 0 , "BIN" )
143 label34 . tag_configure ( ' bold_italics ' , font = ( ' Arial ' , 14 , ' bold ' , ' italic ' ))
144 label34 . grid ( row = 3 , column = 4 , padx = 5 , pady = 5 )
145 #END FLOAT-CALC
146
147 #ASCII-CALC
148 label40 = Text ( window , height = 1 , borderwidth = 0 , width = 16 , font = ( "Arial" , 14 ))
149 label40 . insert ( 1 . 0 , "HEX" )
150 label40 . tag_configure ( ' bold_italics ' , font = ( ' Arial ' , 14 , ' bold ' , ' italic ' ))
151 label40 . grid ( row = 4 , column = 0 , padx = 5 , pady = 5 )
152
153 label41 = Text ( window , height = 1 , borderwidth = 0 , width = 20 , font = ( "Arial" , 14 ))
154 label41 . insert ( 1 . 0 , "INTEGER" )
155 label41 . tag_configure ( ' bold_italics ' , font = ( ' Arial ' , 14 , ' bold ' , ' italic ' ))
156 label41 . grid ( row = 4 , column = 1 , padx = 5 , pady = 5 )
157
158 label42 = Text ( window , height = 1 , borderwidth = 0 , width = 25 , font = ( "Arial" , 14 ))
159 label42 . insert ( 1 . 0 , "FLOAT" )
160 label42 . tag_configure ( ' bold_italics ' , font = ( ' Arial ' , 14 , ' bold ' , ' italic ' ))
161 label42 . grid ( row = 4 , column = 2 , padx = 5 , pady = 5 )
162
163 asciie = tk . Entry ( text = "paul" , fg = "black" , bg = "yellow" , font = ( ' Courier ' , 14 ), width = 9 , borderwidth = 10 )
164 asciie . insert ( END , "paul" )
165 asciie . grid ( row = 4 , column = 3 )
166
167 label44 = Text ( window , height = 1 , borderwidth = 0 , width = 64 , font = ( "Arial" , 14 ))
168 label44 . insert ( 1 . 0 , "BIN" )
169 label44 . tag_configure ( ' bold_italics ' , font = ( ' Arial ' , 14 , ' bold ' , ' italic ' ))
170 label44 . grid ( row = 4 , column = 4 , padx = 5 , pady = 5 )
171 #END ASCII-CALC
172
173 #BIN-CALC
174 label50 = Text ( window , height = 1 , borderwidth = 0 , width = 16 , font = ( "Arial" , 14 ))
175 label50 . insert ( 1 . 0 , "HEX" )
176 label50 . grid ( row = 5 , column = 0 , padx = 5 , pady = 5 )
177
178 label51 = Text ( window , height = 1 , borderwidth = 0 , width = 20 , font = ( "Arial" , 14 ))
179 label51 . insert ( 1 . 0 , "INTEGER" )
180 label51 . grid ( row = 5 , column = 1 , padx = 5 , pady = 5 )
181
182 label52 = Text ( window , height = 1 , borderwidth = 0 , width = 25 , font = ( "Arial" , 14 ))
183 label52 . insert ( 1 . 0 , "FLOAT" )
184 label52 . grid ( row = 5 , column = 2 , padx = 5 , pady = 5 )
185
186 label53 = Text ( window , height = 1 , borderwidth = 0 , width = 9 , font = ( "Arial" , 14 ))
187 label53 . insert ( 1 . 0 , "ASCII" )
188 label53 . grid ( row = 5 , column = 3 , padx = 5 , pady = 5 )
189
190 bine = tk . Entry ( text = "01011010" , fg = "black" , bg = "yellow" , font = ( ' Courier ' , 14 ), width = 64 , borderwidth = 10 )
191 bine . insert ( END , "01011010" )
192 bine . grid ( row = 5 , column = 4 )
193 #END BIN-CALC
194
195 def hex_calc () :
196 #1. Zeile
197 integer = 0
198 hex_in = hexe . get ()
199 label11 . delete ( 1 . 0 , END )
200 label11 . insert ( 1 . 0 , str ( int ( hex_in , 16 )))
201
202 label12 . delete ( 1 . 0 , END )
203 f1 = struct . unpack ( 'f' , struct . pack ( 'I' , int ( hex_in , 16 )))
204 #print("F1 : "+str(f1))
205 #f2=round(f1[0],8)
206 #print("F2 : "+str(f2).format())
207 label12 . insert ( 1 . 0 , str ( f1 [ 0 ]))
208
209 label13 . delete ( 1 . 0 , END )
210 label13 . insert ( 1 . 0 , bytes . fromhex ( hex_in ))
211
212 label14 . delete ( 1 . 0 , END )
213 text = bin ( int ( hex_in , 16 ))
214 label14 . insert ( 1 . 0 , text [ 2 : ])
215 #2.Zeile
216 inte_in = int ( inte . get ())
217 label20 . delete ( 1 . 0 , END )
218 label20 . insert ( 1 . 0 , str ( hex ( inte_in )))
219
220 label22 . delete ( 1 . 0 , END )
221 label22 . insert ( 1 . 0 , str ( float ( inte_in )))
222
223 label23 . delete ( 1 . 0 , END )
224 #print(hex(inte_in)[2:])
225 label23 . insert ( 1 . 0 , bytes . fromhex ( hex ( inte_in )[ 2 : ]))
226
227 label24 . delete ( 1 . 0 , END )
228 text = bin ( inte_in )
229 label24 . insert ( 1 . 0 , text [ 2 : ])
230 #3.Zeile
231 floate_in = float ( floate . get ())
232 label30 . delete ( 1 . 0 , END )
233 label30 . insert ( 1 . 0 , str ( hex ( struct . unpack ( ' < I ' , struct . pack ( ' < f ' , floate_in ))[ 0 ])))
234
235 label31 . delete ( 1 . 0 , END )
236 label31 . insert ( 1 . 0 , str ( int ( floate_in )))
237
238 label33 . delete ( 1 . 0 , END )
239 label33 . insert ( 1 . 0 , bytes . fromhex ( hex ( struct . unpack ( ' < I ' , struct . pack ( ' < f ' , floate_in ))[ 0 ])[ 2 : ]))
240
241 label34 . delete ( 1 . 0 , END )
242 label34 . insert ( 1 . 0 , binary ( floate_in ))
243 #4.Zeile
244 asciie_in = asciie . get ()
245 label40 . delete ( 1 . 0 , END )
246 h = binascii . hexlify ( asciie_in . encode ())
247 label40 . insert ( 1 . 0 , h . decode ())
248
249 label41 . delete ( 1 . 0 , END )
250 label41 . insert ( 1 . 0 , int ( h . decode (), 16 ))
251
252 label42 . delete ( 1 . 0 , END )
253 f2 = struct . unpack ( 'f' , struct . pack ( 'I' , int ( h , 16 )))
254 label42 . insert ( 1 . 0 , float ( f2 [ 0 ]))
255
256 label44 . delete ( 1 . 0 , END )
257 label44 . insert ( 1 . 0 , bin ( int ( h , 16 ))[ 2 : ])
258 #5.Zeile
259 bine_in = bine . get ()
260 label50 . delete ( 1 . 0 , END )
261 label50 . insert ( 1 . 0 , hex ( int ( bine_in , 2 )))
262 h = hex ( int ( bine_in , 2 ))
263
264 label51 . delete ( 1 . 0 , END )
265 label51 . insert ( 1 . 0 , int ( bine_in , 2 ))
266
267 label52 . delete ( 1 . 0 , END )
268 f2 = struct . unpack ( 'f' , struct . pack ( 'I' , int ( h , 16 )))
269 label52 . insert ( 1 . 0 , float ( f2 [ 0 ]))
270
271 label53 . delete ( 1 . 0 , END )
272 label53 . insert ( 1 . 0 , bytes . fromhex ( hex ( int ( bine_in , 2 ))[ 2 : ]))
273
274 calc = tk . Button (
275 command = hex_calc ,
276 text = "HEX-Calc" ,
277 width = 12 ,
278 font = ( ' Arial ' , 14 ),
279 bg = "white" ,
280 fg = "Black" ,
281 )
282 calc . grid ( row = 0 , column = 5 , padx = 5 , pady = 5 )
283
284 calc = tk . Button (
285 command = hex_calc ,
286 text = "Save2File" ,
287 width = 12 ,
288 font = ( ' Arial ' , 14 ),
289 bg = "white" ,
290 fg = "Black" ,
291 )
292 calc . grid ( row = 1 , column = 5 , padx = 5 , pady = 5 )
293
294 window . mainloop ()
von
wer (Gast)
14.07.2020 20:36
Indem du die Labels in eine Liste packst und über den Index ansprichst
von
Micha (Gast)
15.07.2020 08:37
Pack die relevanten Elemente einer Zeile in eine Liste und die so
entstandene Sammlung solcher Listen ebenfalls in eine Liste. Dann
iterierst du über die äußere Liste und holst dir die Elemente der
inneren Liste. Für die Nummerierung der Label nutzt du die Zeilennummer.
von
Matthias (Gast)
16.07.2020 05:34
Hallo wer und Micha :)
Danke für den TIP :)
Das werd ich heute Abend mal versuchen...
Grüße Matthias
Matthias schrieb:
>
Ich weiß, die meisten Tutorials machen das so. Aber das ist...
Verzeihung, schlechte Medizin!
Tatsache ist: man kann von Tkinter (und Tix) erben. Da das aber alte
Klassen sind, die nicht von object erben, funktioniert super() leider
nicht. Aber auf die "alte" Art geht das natürlich trotzdem:
1 import Tix as T
2
3 class mainWin(T.Tk):
4 def __init__(self, *args, **kwargs):
5 T.Tk.__init__(self, *args, **kwargs)
6 self.exitBtn = T.Button(self, text='Exit', command=self.destroy)
7 self.exitBtn.pack(side=T.TOP)
8
9 for i in range(3):
10 T.Button(self, text='X' + str(i), command=self.destroy).pack(side=T.TOP)
11
12
13 if __name__ == '__main__':
14 mainWin().mainloop()
Auf diese Weise kannst Du auch von Tix.Frame (oder Tkinter.Frame, ...)
erben, und damit Deine eigenen Widgets schreiben. Außerdem lassen sich
Widgets natürlich in Listen und anderen Datenstrukturen organisieren,
... oder Events daran binden mit "bind()", oder ... ;-)
Have fun!
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.