DSPython  00.03.03 — 25 juin 2012
 Tout Classes Espaces de nommage Fichiers Fonctions Variables Pages
naturalTk.py
Aller à la documentation de ce fichier.
1 #!/usr/bin/env python
2 # -*- coding: latin-1 -*-
3 ##\file
4 # Application <b>Natural Tk</b> calculant quelques fonctions arithmétiques
5 #
6 # \htmlonly <a class="relative" href="naturalTk.png" target="_blank"><img
7 # src="naturalTk_th.png" border="0" align="top" alt="[naturalTk_th.png]"></a>\endhtmlonly\n
8 # Cf. \htmlonly <a href="http://www.opimedia.be/naturels/" target="_blank">
9 # <tt>http://www.opimedia.be/naturels/</tt></a>\endhtmlonly
10 
11 # (c) Olivier Pirson --- DragonSoft
12 # http://www.opimedia.be/DS/
13 # Débuté le 26 février 2009
14 # v.00.00 --- 14 juin 2009
15 # --- 29 septembre 2009 : nouveau site web
16 # --- 20 décembre 2009 : adapte pour Python 3
17 # v.00.01 --- 16 mars 2010 : nouveau site web et changement des % en .format()
18 # --- 12 avril 2010 : cfr. -> cf.
19 ###############################################################################
20 
21 ## Version
22 VERSION = 'v.00.01 --- 2010 April 12'
23 
24 import sys
25 
26 if sys.version_info[0] >= 3: # Python >= 3
27  import tkinter as tk
28  import tkinter.font as tkFont
29  import tkinter.messagebox as tkMessageBox
30 
31  ## Remplacement de la fonction disparue dans Python 3
32  def unichr(i):
33  return chr(i)
34 
35 else: # 2.6 <= Python < 3
36  import Tkinter as tk
37  import tkFont
38  import tkMessageBox
39 
40 import DSPython
41 import DSPython.factors as factors
42 import DSPython.nbsystem as nbsystem
43 
44 try:
45  if not 'profile' in dir():
46  import psyco
47  psyco.full()
48 except ImportError:
49  pass
50 
51 
52 
53 # ####################
54 # Variables globales #
55 ######################
56 ## Naturel courant
57 n = 0
58 
59 ## Primaries (liste des (facteur premier, exposant)) de n ou None
60 primaries = None
61 
62 
63 
64 # ###################################
65 # Variables globales de l'interface #
66 #####################################
67 ## Fenêtre principale
68 tk_Win = tk.Tk()
69 
70 ## Police de caractères à taille fixe
71 tk_Font_monospace = tkFont.Font(tk_Win, size=10, family='courier')
72 
73 
74 
75 # ############################
76 # Fonctions pour l'interface #
77 ##############################
78 ## MessageBox About...
79 def cmd_about():
80  tkMessageBox.showinfo('About...',
81  """Natural Tk
82 
83 {0}
84 (c) Olivier Pirson --- DragonSoft
85 {1}
86 
87 
88 Infos:
89 {2}
90 Python {3}""".format(VERSION, DSPython.DS_web, DSPython.VERSION, sys.version))
91 
92 
93 ## Initialise le naturel n avec la valeur saisie
94 def cmd_change_n(event=None):
95  global n
96 
97  s = tk_Entry_n.get()
98  try:
99  n = int(s)
100  except:
101  n = -1
102 
103  if n < 0:
104  n = 0
105 
106  cmd_update()
107 
108 
109 ## Callback pour le Button 'Quit'
110 def cmd_quit():
111  if tkMessageBox.askyesno('Quit?', 'Quit Natural Tk?'):
112  tk_Win.quit()
113 
114 
115 ## Mise à jour
116 def cmd_update():
117  global primaries
118 
119  tk_Label_n_10.config(text='n = ' + str(n))
120  tk_Label_n_2.config(text=bin(n))
121  tk_Label_n_3.config(text='0t{0}'.format(nbsystem.to_str(n, b=3)))
122  tk_Label_n_16.config(text=hex(n))
123 
124  primaries = (factors.primaries(n) if n > 0
125  else None)
126  tk_Label_factors.config(text=(factors.primaries_str(primaries, times=' . ') if primaries != None
127  else '/'))
128  tk_Label_div_nb.config(text=unichr(957) + '(n) = '
129  + (str(factors.divisors_nb(primaries)) if primaries != None
130  else unichr(8734)))
131  tk_Label_div_sum.config(text=unichr(963) + '(n) = '
132  + (str(factors.divisors_sum(primaries)) if primaries != None
133  else unichr(8734)))
134 
135  tk_Label_mobius.config(text=unichr(956) + '(n) = '
136  + (str(factors.mobius(primaries)) if primaries != None
137  else '/'))
138  tk_Label_rad.config(text='rad(n) = '
139  + (str(factors.primaries_to_n(factors.rad(primaries)))
140  if primaries != None
141  else '/'))
142  tk_Label_totient.config(text=unichr(966) + '(n) = '
143  + (str(factors.totient(primaries)) if primaries != None
144  else '1'))
145 
146  tk_Label_4sqr.config(text='GR(n) = '
147  + (str(factors.nb_in_integers_4sqr(primaries)) if primaries != None
148  else '1'))
149 
150 
151 
152 # ######\cond MAIN
153 # Main #
154 ########
155 tk_Win.title('Natural Tk')
156 tk_Win.resizable(0,0)
157 tk_Win.protocol('WM_DELETE_WINDOW', cmd_quit)
158 
159 
160 ## Frame temporaire utilisé pour disposer les éléments
161 tk_Frame = tk.Frame(tk_Win)
162 
163 ## Entry pour le naturel n
164 tk_Entry_n = tk.Entry(tk_Frame, width=20)
165 tk_Entry_n.insert(tk.END, '')
166 tk_Entry_n.bind('<Return>', cmd_change_n)
167 tk_Entry_n.pack(side=tk.LEFT)
168 
169 tk.Frame(tk_Frame, width=10).pack(side=tk.LEFT)
170 tk.Button(tk_Frame, text='About', command=cmd_about).pack(side=tk.LEFT)
171 tk.Button(tk_Frame, text='Quit', command=cmd_quit).pack(side=tk.LEFT)
172 
173 tk_Frame.pack(side=tk.TOP, fill=tk.X)
174 
175 
176 tk_Frame = tk.Frame(tk_Win)
177 ## Label pour afficher n en base 10
178 tk_Label_n_10 = tk.Label(tk_Frame, font=tk_Font_monospace)
179 tk_Label_n_10.pack(side=tk.RIGHT, fill=tk.X)
180 tk_Frame.pack(side=tk.TOP, fill=tk.X)
181 
182 tk_Frame = tk.Frame(tk_Win)
183 ## Label pour afficher n en base 2
184 tk_Label_n_2 = tk.Label(tk_Frame, font=tk_Font_monospace)
185 tk_Label_n_2.pack(side=tk.RIGHT, fill=tk.X)
186 tk_Frame.pack(side=tk.TOP, fill=tk.X)
187 
188 tk_Frame = tk.Frame(tk_Win)
189 ## Label pour afficher n en base 3
190 tk_Label_n_3 = tk.Label(tk_Frame, font=tk_Font_monospace)
191 tk_Label_n_3.pack(side=tk.RIGHT, fill=tk.X)
192 tk_Frame.pack(side=tk.TOP, fill=tk.X)
193 
194 tk_Frame = tk.Frame(tk_Win)
195 ## Label pour afficher n en base 16
196 tk_Label_n_16 = tk.Label(tk_Frame, font=tk_Font_monospace)
197 tk_Label_n_16.pack(side=tk.RIGHT, fill=tk.X)
198 tk_Frame.pack(side=tk.TOP, fill=tk.X)
199 
200 
201 tk_Frame = tk.Frame(tk_Win, height=5)
202 tk_Frame.pack(side=tk.TOP)
203 
204 tk_Frame = tk.Frame(tk_Win)
205 ## Label pour afficher n décomposé en facteurs premiers
206 tk_Label_factors = tk.Label(tk_Frame, font=tk_Font_monospace)
207 tk_Label_factors.pack(side=tk.RIGHT, fill=tk.X)
208 tk_Frame.pack(side=tk.TOP, fill=tk.X)
209 
210 tk_Frame = tk.Frame(tk_Win)
211 ## Label pour afficher le nombre de diviseurs
212 tk_Label_div_nb = tk.Label(tk_Frame, font=tk_Font_monospace)
213 tk_Label_div_nb.pack(side=tk.RIGHT, fill=tk.X)
214 tk_Frame.pack(side=tk.TOP, fill=tk.X)
215 
216 tk_Frame = tk.Frame(tk_Win)
217 ## Label pour afficher la somme des diviseurs
218 tk_Label_div_sum = tk.Label(tk_Frame, font=tk_Font_monospace)
219 tk_Label_div_sum.pack(side=tk.RIGHT, fill=tk.X)
220 tk_Frame.pack(side=tk.TOP, fill=tk.X)
221 
222 
223 tk_Frame = tk.Frame(tk_Win)
224 ## Label pour afficher la valeur de la fonction mu de Mobius
225 tk_Label_mobius = tk.Label(tk_Frame, font=tk_Font_monospace)
226 tk_Label_mobius.pack(side=tk.RIGHT, fill=tk.X)
227 tk_Frame.pack(side=tk.TOP, fill=tk.X)
228 
229 tk_Frame = tk.Frame(tk_Win)
230 ## Label pour afficher la valeur de la fonction radical
231 tk_Label_rad = tk.Label(tk_Frame, font=tk_Font_monospace)
232 tk_Label_rad.pack(side=tk.RIGHT, fill=tk.X)
233 tk_Frame.pack(side=tk.TOP, fill=tk.X)
234 
235 tk_Frame = tk.Frame(tk_Win)
236 ## Label pour afficher la valeur de la fonction totient
237 tk_Label_totient = tk.Label(tk_Frame, font=tk_Font_monospace)
238 tk_Label_totient.pack(side=tk.RIGHT, fill=tk.X)
239 tk_Frame.pack(side=tk.TOP, fill=tk.X)
240 
241 tk_Frame = tk.Frame(tk_Win)
242 ## Label pour afficher le nombre de décomposition en somme de 4 carrés
243 tk_Label_4sqr = tk.Label(tk_Frame, font=tk_Font_monospace)
244 tk_Label_4sqr.pack(side=tk.RIGHT, fill=tk.X)
245 tk_Frame.pack(side=tk.TOP, fill=tk.X)
246 
247 
248 tk_Frame = None
249 cmd_update()
250 tk_Win.mainloop()
251 ##\endcond MAIN