Python - Cambiar de tamaño fuente de menu

 
Vista:
Imágen de perfil de Jose Manuel
Val: 30
Ha aumentado su posición en 224 puestos en Python (en relación al último mes)
Gráfica de Python

Cambiar de tamaño fuente de menu

Publicado por Jose Manuel (11 intervenciones) el 11/06/2021 20:33:04
Buenas tardes,
He realizado una interface grafica con tkinter y estaría interesado en cambiar el tamaño de la fuente del menu de dicha interface, pero no encuentro la manera de hacerlo.
¿Podría alguien ayudarme?
Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 2.808
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Cambiar de tamaño fuente de menu

Publicado por tincopasan (1082 intervenciones) el 11/06/2021 20:45:57
poné un código de ejemplo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Jose Manuel
Val: 30
Ha aumentado su posición en 224 puestos en Python (en relación al último mes)
Gráfica de Python

Cambiar de tamaño fuente de menu

Publicado por Jose Manuel (11 intervenciones) el 11/06/2021 21:13:08
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import serial
from tkinter import *
from tkinter import messagebox
import tkinter as tk
import time
from datetime import datetime, timedelta
import os
import locale
import sched
import threading
import queue
from multiprocessing import Process
import sqlite3
import urllib.request
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
import smtplib
import os, sys, subprocess
import mysql.connector
import uuid
import getmac
import pyfirmata2
 
 
 
######################################################## ANULACIÓN DE "X" DE CERRADO DE VENTANAS ########################################################
def botonCerrarTotal():
	pass
 
 
 
######################################################## INTERFACE GRAFICA ########################################################
raiz = Tk()
raiz.title("PRUEBAS")
raiz.resizable(False,False)
raiz.geometry("900x300")
raiz.overrideredirect(0)
 
 
 
FramePrincipal=Frame(raiz)
FramePrincipal.pack()
FramePrincipal.config(width="600", height="450")
 
 
 
######################################################## CERRAR EL SISTEMA NEMESIS ########################################################
def salirSistema():
	raiz.destroy()
 
 
 
######################################################## BARRA DE MENÚ ########################################################
barraMenu=Menu(raiz)
raiz.config(menu=barraMenu)
 
sistemaMenu=Menu(barraMenu, tearoff=0)
sistemaMenu.add_command(label="Activar Modo Instalador")
sistemaMenu.add_command(label="Salir Modo Instalador")
sistemaMenu.add_command(label="Contador Hilos Activos")
sistemaMenu.add_command(label="Salir", command=salirSistema)
 
barraMenu.add_cascade(label="Sistema", menu=sistemaMenu)
 
 
 
######################################################## LOOP DE INTERFACE ########################################################
raiz.protocol("WM_DELETE_WINDOW", salirSistema)
raiz.mainloop()
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 2.808
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Cambiar de tamaño fuente de menu

Publicado por tincopasan (1082 intervenciones) el 12/06/2021 15:25:33
podes probar con algo como:

1
2
3
4
5
6
barraMenu=Menu(raiz)
raiz.config(menu=barraMenu)
fuente='Arial 12 bold'
sistemaMenu=Menu(barraMenu, tearoff=0)
sistemaMenu.add_command(label="Activar Modo Instalador",font = fuente)
sistemaMenu.add_command(label="Salir Modo Instalador",font = fuente)

etc

eso para elementos de forma individual o sino :

1
2
3
4
5
6
barraMenu=Menu(raiz)
raiz.config(menu=barraMenu)
fuente='Arial 12 bold'
sistemaMenu=Menu(barraMenu,font = fuente, tearoff=0)
sistemaMenu.add_command(label="Activar Modo Instalador")
sistemaMenu.add_command(label="Salir Modo Instalador")
etc,
para el controlador.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Jose Manuel
Val: 30
Ha aumentado su posición en 224 puestos en Python (en relación al último mes)
Gráfica de Python

Cambiar de tamaño fuente de menu

Publicado por Jose Manuel (11 intervenciones) el 13/06/2021 10:39:16
Muchas gracias por tu ayuda tincopasan!!
Al realizar las modificaciones que me indicas en el código, se aumenta el tamaño de la fuente del submenú que cuelga del menú principal sistema, pero he intentado seguir el mismo planteamiento para el menú sistema y no consigo hacer que la fuente se modifique.
Perdonad mi falta de conocimiento aún, pero ¿me podrías indicar como modificar también el menú principal?
Muchas gracias!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 2.808
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Cambiar de tamaño fuente de menu

Publicado por tincopasan (1082 intervenciones) el 13/06/2021 16:46:37
Es imposible, el top level del menu está limitado al sistema operativo, o sea solo si cambias las opciones del sistema se verá más grande, esa es una desventaja de tkinter , pero se puede simular haciendo ora cosa:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import tkinter as tk
from tkinter import ttk
 
raiz = tk.Tk()
raiz.title("PRUEBAS")
raiz.resizable(False,False)
raiz.geometry("900x300")
raiz.overrideredirect(0)
 
fuente='Arial 12 bold'
 
style = ttk.Style()
style.configure('TMenubutton', font=fuente)
 
menu = ttk.Menubutton(raiz,text="Sistema")
 
sistemaMenu = tk.Menu(menu,font= fuente, tearoff=0)
sistemaMenu.add_command(label="Activar Modo Instalador")
sistemaMenu.add_command(label="Salir Modo Instalador")
sistemaMenu.add_command(label="Contador Hilos Activos")
sistemaMenu.add_separator()
sistemaMenu.add_command(label="Salir", command=raiz.quit)
 
menu.configure(menu=sistemaMenu)
menu.place(x=0,y=0)
raiz.mainloop()

en donde por medio de ttk usamos style(para cambiar la apariencia de las clases) y Menubutton al cual le asignamos el menu convencional de tkinter, Una cosa no menos importante fijate como importo las bibliotecas y las uso, esa es la forma más conveniente.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Jose Manuel
Val: 30
Ha aumentado su posición en 224 puestos en Python (en relación al último mes)
Gráfica de Python

Cambiar de tamaño fuente de menu

Publicado por Jose Manuel (11 intervenciones) el 14/06/2021 00:01:31
Muchísimas gracias una vez mas por tu ayuda tincopasan.. me has vuelto a solucionar la tarde.. jejjee..
Con gente como tu, a los que estamos empezando con python, nos es mucho más fácil aprender y lograr desarrollar nuestros proyectos..
Muchas gracias de nuevo!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Jose Manuel
Val: 30
Ha aumentado su posición en 224 puestos en Python (en relación al último mes)
Gráfica de Python

Cambiar de tamaño fuente de menu

Publicado por Jose Manuel (11 intervenciones) el 22/06/2021 20:40:10
Buenas tardes de nuevo amigos,
Continuo desarrollando mi proyecto.. ya he logrado hacer que la interface grafica sea lo que estoy buscando, pero me he encontrado con otro problema.
Mi interface es la parte visible del un dispositivo arduino, y cuando genero el código de arduino y lo subo a la placa, la conexión la rezo a través del puerto serie. Dicho puerto me permite el envío de datos de arduino a python o viceversa.
El problema surge cuando intento enviar y recibir datos, ya que python entiende que el puerto está siendo ocupado por el arduino y me genera un error.
Se que este no es un foro de arduino, pero estoy buscando una solución que implemente mi código de python en el que ya dispongo de arduino y que sea funcional.
A ver si alguien puede darme algunas pautas para enfocar esto.
Muchas gracias por vuestra atención.
Un saludo!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 2.808
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Cambiar de tamaño fuente de menu

Publicado por tincopasan (1082 intervenciones) el 23/06/2021 04:24:14
poné el código, no adivinamos que estás haciendo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Jose Manuel
Val: 30
Ha aumentado su posición en 224 puestos en Python (en relación al último mes)
Gráfica de Python

Cambiar de tamaño fuente de menu

Publicado por Jose Manuel (11 intervenciones) el 29/06/2021 11:37:43
Buenos días,
Disculpen por mi demora, aquí les dejo el código que hasta el momento funciona, tal y como adelanté en mi anterior post solo si envío información de Python a Arduino, pero no consigo hacerlo funcionar de forma conjunta al recibir la información de Arduino.
Espero puedan darme alguna solución.
Muchas gracias por su ayuda de antemano!!


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
import serial
from tkinter import *
from tkinter import messagebox
import tkinter as tk
import time
from datetime import datetime, timedelta
import os
import locale
import sched
import threading
import queue
from multiprocessing import Process
import sqlite3
import urllib.request
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
import smtplib
import os, sys, subprocess
import mysql.connector
import uuid
import getmac
import pyfirmata2
 
 
 
######################################################## ANULACIÓN DE "X" DE CERRADO DE VENTANAS ########################################################
def botonCerrarTotal():
	pass
 
 
 
######################################################## INTERFACE GRAFICA ########################################################
def center(ventana):
	ventana.update_idletasks()
 
	width = ventana.winfo_width()
	frm_width = ventana.winfo_rootx() - ventana.winfo_x()
	win_width = width + 2 * frm_width
 
	height = ventana.winfo_height()
	titlebar_height = ventana.winfo_rooty() - ventana.winfo_y()
	win_height = height + titlebar_height + frm_width
 
	x = ventana.winfo_screenwidth() // 2 - win_width // 2
	y = ventana.winfo_screenheight() // 2 - win_height // 2
 
	ventana.geometry('{}x{}+{}+{}'.format(width, height, x, y))
	ventana.deiconify()
 
 
 
raiz = Tk()
raiz.title("PRUEBAS")
raiz.resizable(False,False)
raiz.geometry("900x300")
raiz.overrideredirect(0)
center(raiz)
 
 
 
FramePrincipal=Frame(raiz)
FramePrincipal.pack()
FramePrincipal.config(width="600", height="450")
 
 
 
locale.setlocale(locale.LC_ALL, '')
 
FrameReloj=Frame(raiz)
FrameReloj.pack()
current_time_label=tk.Label(text=time.strftime("%A, %d de %B de %Y \n %H:%M:%S"), font=('Tahoma', 12))
current_time_label.place(x=650, y=20)
current_time_label.config(bg="white")
 
global timeRunning
timeRunning = tk.BooleanVar()
timeRunning.set(True)
 
def update_clock():
	time_now=time.strftime("%A, %d de %B de %Y \n %H:%M:%S")
	if timeRunning.get() == True:
		if current_time_label['text']!=time_now:
			current_time_label["text"]=time_now
		FrameReloj.after(1000, update_clock)
	else:
		FrameReloj.after_cancel(update_clock)
update_clock()
 
 
 
######################################################## CONEXION A ARDUINO ########################################################
serialPort = 'COM6'
baudRate = 9600
global serialArduino
serialArduino = serial.Serial(serialPort, baudRate)
 
 
######################################################## ENVIO DATOS A ARDUINO ########################################################
def DesconexionSistema():
	serialArduino = serial.Serial(serialPort, baudRate)
	serialArduino.write(b'9')
	serialArduino.close()
 
def ActivacionSistema():
	serialArduino = serial.Serial(serialPort, baudRate)
	serialArduino.write(b'1')
	serialArduino.close()
 
def ParoSistema():
	serialArduino = serial.Serial(serialPort, baudRate)
	serialArduino.write(b'0')
	serialArduino.close()
 
def PulsadorManual():
	serialArduino = serial.Serial(serialPort, baudRate)
	serialArduino.write(b'3')
	serialArduino.close()
#PulsadorManual()
 
def ParoManual():
	serialArduino = serial.Serial(serialPort, baudRate)
	serialArduino.write(b'2')
	serialArduino.close()
 
def ActivacionSonido():
	serialArduino = serial.Serial(serialPort, baudRate)
	serialArduino.write(b'5')
	serialArduino.close()
#ActivacionSonido()
 
def ParoSonido():
	serialArduino = serial.Serial(serialPort, baudRate)
	serialArduino.write(b'4')
	serialArduino.close()
 
def ActivacionAlarma1():
	serialArduino = serial.Serial(serialPort, baudRate)
	serialArduino.write(b'A')
	serialArduino.close()
 
def ParoAlarma1():
	serialArduino = serial.Serial(serialPort, baudRate)
	serialArduino.write(b'B')
	serialArduino.close()
 
def ActivacionAlarma2():
	serialArduino = serial.Serial(serialPort, baudRate)
	serialArduino.write(b'C')
	serialArduino.close()
 
def ParoAlarma2():
	serialArduino = serial.Serial(serialPort, baudRate)
	serialArduino.write(b'D')
	serialArduino.close()
 
def ActivacionAlarma3():
	serialArduino = serial.Serial(serialPort, baudRate)
	serialArduino.write(b'E')
	serialArduino.close()
 
def ParoAlarma3():
	serialArduino = serial.Serial(serialPort, baudRate)
	serialArduino.write(b'F')
	serialArduino.close()
 
 
 
######################################################## RECEPCION DATOS DE ARDUINO ########################################################
def ObtenerDatosArduino():
	while(True):
		global STModoInstalador
		if STModoInstalador.get() == True:
			pass
		else:
			global serialArduino
			serialArduino = serial.Serial(serialPort, baudRate)
			LecturaArduino = serialArduino.readline()
			new_LecturaArduino = LecturaArduino.decode("utf-8")
			final_LecturaArduino = new_LecturaArduino.strip()
			print (final_LecturaArduino)
			serialArduino.close()
			time.sleep(0.1)
 
 
 
######################################################## BOTON SONIDO ########################################################
STBotonSonido = tk.BooleanVar()
STBotonSonido.set(True)
 
def pulsacionBotonSonido():
	if STBotonSonido.get() == False:
		STBotonSonido.set(True)
		BotonSonido.config(image=ImagenBotonSonidoActivado)
		EventoBotonSonidoActivado = datetime.now().strftime("%A, %d de %B de %Y a las %H:%M:%S")
		ActivacionSonido()
		print("AVISADOR ACUSTICO ACTIVADO " + time.strftime(EventoBotonSonidoActivado))
	else:
		STBotonSonido.set(False)
		BotonSonido.config(image=ImagenBotonSonidoSilencio)
		EventoBotonSonidoSilencio = datetime.now().strftime("%A, %d de %B de %Y a las %H:%M:%S")
		ParoSonido()
		print("AVISADOR ACUSTICO SILENCIADO " + time.strftime(EventoBotonSonidoSilencio))
 
BotonSonido=Frame(raiz)
BotonSonido.pack()
ImagenBotonSonidoActivado = PhotoImage (file = "CON_SONIDO.png")
ImagenBotonSonidoSilencio = PhotoImage (file = "SIN_SONIDO.png")
BotonSonido = tk.Button(raiz, image=ImagenBotonSonidoActivado, command=pulsacionBotonSonido)
BotonSonido.config(width="120", height="120")
BotonSonido.place(x=20, y=140)
 
 
 
######################################################## BOTON ALARMA 1 ########################################################
STBotonAlarma1 = tk.BooleanVar()
STBotonAlarma1.set(False)
 
def cambioEstadoAlarma1():
	if (BotonAlarma1["state"] == tk.DISABLED):
		BotonAlarma1["state"] = tk.NORMAL
		BotonAlarma1.config(image=ImagenBotonAlarma1Habilitado)
	else:
		BotonAlarma1["state"] = tk.DISABLED
		BotonAlarma1.config(image=ImagenBotonAlarma1Deshabilitado)
 
 
def pulsacionBotonAlarma1():
	if STBotonAlarma1.get() == True:
		STBotonAlarma1.set(False)
		BotonAlarma1.config(image=ImagenBotonAlarma1Habilitado)
		ParoAlarma1()
		ParoEstadoLetreroAlarma1()
		CambioEstadoLetreroAlarma1()
		EventoBotonAlarma1 = datetime.now().strftime("%A, %d de %B de %Y a las %H:%M:%S")
		print("ALARMA 1 PARADA " + time.strftime(EventoBotonAlarma1))
	else:
		STBotonAlarma1.set(True)
		BotonAlarma1.config(image=ImagenBotonAlarma1Pulsado)
		ActivacionAlarma1()
		ActivacionEstadoLetreroAlarma1()
		CambioEstadoLetreroAlarma1()
		EventoBotonAlarma1 = datetime.now().strftime("%A, %d de %B de %Y a las %H:%M:%S")
		print("ALARMA 1 ACTIVADA " + time.strftime(EventoBotonAlarma1))
 
BotonAlarma1=Frame(raiz)
BotonAlarma1.pack()
ImagenBotonAlarma1Deshabilitado = PhotoImage (file = "BOTON_ON_STANDBY.png")
ImagenBotonAlarma1Habilitado = PhotoImage (file = "BOTON_ON_STANDBY.png")
ImagenBotonAlarma1Pulsado = PhotoImage (file = "BOTON_ON_VERDE.png")
BotonAlarma1 = tk.Button(raiz, state=tk.DISABLED, image=ImagenBotonAlarma1Habilitado, command=pulsacionBotonAlarma1)
BotonAlarma1.config(width="120", height="120")
BotonAlarma1.place(x=165, y=140)
 
 
 
######################################################## BOTON ALARMA 2 ########################################################
global STBotonAlarma2
STBotonAlarma2 = tk.BooleanVar()
STBotonAlarma2.set(False)
 
def cambioEstadoAlarma2():
	if (BotonAlarma2["state"] == tk.DISABLED):
		BotonAlarma2["state"] = tk.NORMAL
		BotonAlarma2.config(image=ImagenBotonAlarma2Habilitado)
	else:
		BotonAlarma2["state"] = tk.DISABLED
		BotonAlarma2.config(image=ImagenBotonAlarma2Deshabilitado)
 
 
def pulsacionBotonAlarma2():
	if STBotonAlarma2.get() == True:
		STBotonAlarma2.set(False)
		BotonAlarma2.config(image=ImagenBotonAlarma2Habilitado)
		ParoAlarma2()
		ParoEstadoLetreroAlarma2()
		CambioEstadoLetreroAlarma2()
		EventoBotonAlarma2 = datetime.now().strftime("%A, %d de %B de %Y a las %H:%M:%S")
		print("ALARMA 2 PARADA " + time.strftime(EventoBotonAlarma2))
	else:
		STBotonAlarma2.set(True)
		BotonAlarma2.config(image=ImagenBotonAlarma2Pulsado)
		ActivacionAlarma2()
		ActivacionEstadoLetreroAlarma2()
		CambioEstadoLetreroAlarma2()
		EventoBotonAlarma2 = datetime.now().strftime("%A, %d de %B de %Y a las %H:%M:%S")
		print("ALARMA 2 ACTIVADA " + time.strftime(EventoBotonAlarma2))
 
BotonAlarma2=Frame(raiz)
BotonAlarma2.pack()
ImagenBotonAlarma2Deshabilitado = PhotoImage (file = "BOTON_ON_STANDBY.png")
ImagenBotonAlarma2Habilitado = PhotoImage (file = "BOTON_ON_STANDBY.png")
ImagenBotonAlarma2Pulsado = PhotoImage (file = "BOTON_ON_VERDE.png")
BotonAlarma2 = tk.Button(raiz, state=tk.DISABLED, image=ImagenBotonAlarma2Habilitado, command=pulsacionBotonAlarma2)
BotonAlarma2.config(width="120", height="120")
BotonAlarma2.place(x=310, y=140)
 
 
 
######################################################## BOTON ALARMA 3 ########################################################
global STBotonAlarma3
STBotonAlarma3 = tk.BooleanVar()
STBotonAlarma3.set(False)
 
def cambioEstadoAlarma3():
	if (BotonAlarma3["state"] == tk.DISABLED):
		BotonAlarma3["state"] = tk.NORMAL
		BotonAlarma3.config(image=ImagenBotonAlarma3Habilitado)
	else:
		BotonAlarma3["state"] = tk.DISABLED
		BotonAlarma3.config(image=ImagenBotonAlarma3Deshabilitado)
 
 
def pulsacionBotonAlarma3():
	if STBotonAlarma3.get() == True:
		STBotonAlarma3.set(False)
		BotonAlarma3.config(image=ImagenBotonAlarma3Habilitado)
		ParoAlarma3()
		ParoEstadoLetreroAlarma3()
		CambioEstadoLetreroAlarma3()
		EventoBotonAlarma3 = datetime.now().strftime("%A, %d de %B de %Y a las %H:%M:%S")
		print("ALARMA 3 PARADA " + time.strftime(EventoBotonAlarma3))
	else:
		STBotonAlarma3.set(True)
		BotonAlarma3.config(image=ImagenBotonAlarma3Pulsado)
		ActivacionAlarma3()
		ActivacionEstadoLetreroAlarma3()
		CambioEstadoLetreroAlarma3()
		EventoBotonAlarma3 = datetime.now().strftime("%A, %d de %B de %Y a las %H:%M:%S")
		print("ALARMA 3 ACTIVADA " + time.strftime(EventoBotonAlarma3))
 
BotonAlarma3=Frame(raiz)
BotonAlarma3.pack()
ImagenBotonAlarma3Deshabilitado = PhotoImage (file = "BOTON_ON_STANDBY.png")
ImagenBotonAlarma3Habilitado = PhotoImage (file = "BOTON_ON_STANDBY.png")
ImagenBotonAlarma3Pulsado = PhotoImage (file = "BOTON_ON_VERDE.png")
BotonAlarma3 = tk.Button(raiz, state=tk.DISABLED, image=ImagenBotonAlarma3Habilitado, command=pulsacionBotonAlarma3)
BotonAlarma3.config(width="120", height="120")
BotonAlarma3.place(x=455, y=140)
 
 
 
######################################################## BOTON REARME MANUAL ########################################################
STBotonRearmeManual = tk.BooleanVar()
STBotonRearmeManual.set(True)
 
def pulsacionBotonRearmeManual():
	if STBotonRearmeManual.get() == True:
		STBotonRearmeManual.set(True)
		STBotonParoManual.set(False)
		BotonRearmeManual.config(image=ImagenBotonRearmeManualPulsado)
		BotonParoManual.config(image=ImagenBotonParoManualSinPulsar)
	else:
		if STBotonAlarma1.get() == True or STBotonAlarma2.get() == True or STBotonAlarma3.get() == True:
			pass
		else:
			STBotonRearmeManual.set(True)
			STBotonParoManual.set(False)
			BotonRearmeManual.config(image=ImagenBotonRearmeManualPulsado)
			BotonParoManual.config(image=ImagenBotonParoManualSinPulsar)
			PulsadorManual()
			EventoBotonRearmeManual = datetime.now().strftime("%A, %d de %B de %Y a las %H:%M:%S")
			print("PULSADOR REARME MANUAL ACTIVADO " + time.strftime(EventoBotonRearmeManual))
 
BotonRearmeManual=Frame(raiz)
BotonRearmeManual.pack()
ImagenBotonRearmeManualDeshabilitado = PhotoImage (file = "BOTON_ON_STANDBY.png")
ImagenBotonRearmeManualHabilitado = PhotoImage (file = "BOTON_ON_STANDBY.png")
ImagenBotonRearmeManualSinPulsar = PhotoImage (file = "BOTON_ON_STANDBY.png")
ImagenBotonRearmeManualPulsado = PhotoImage (file = "BOTON_ON_VERDE.png")
BotonRearmeManual = tk.Button(raiz, image=ImagenBotonRearmeManualPulsado, command=pulsacionBotonRearmeManual)
BotonRearmeManual.config(width="120", height="120")
BotonRearmeManual.place(x=600, y=140)
 
 
 
######################################################## BOTON PARO EMERGENCIA ########################################################
STBotonParoManual = tk.BooleanVar()
STBotonParoManual.set(False)
 
def pulsacionBotonParoManual():
	if STBotonParoManual.get() == False:
		STBotonRearmeManual.set(False)
		STBotonParoManual.set(True)
		BotonParoManual.config(image=ImagenBotonParoManualPulsado)
		BotonRearmeManual.config(image=ImagenBotonRearmeManualSinPulsar)
		ParoManual()
		EventoBotonParoManual = datetime.now().strftime("%A, %d de %B de %Y a las %H:%M:%S")
		print("PULSADOR PARO EMERGENCIA ACTIVADO " + time.strftime(EventoBotonParoManual))
	else:
		STBotonRearmeManual.set(False)
		STBotonParoManual.set(True)
		BotonParoManual.config(image=ImagenBotonParoManualPulsado)
		BotonRearmeManual.config(image=ImagenBotonRearmeManualSinPulsar)
 
BotonParoManual=Frame(raiz)
BotonParoManual.pack()
ImagenBotonParoManualDeshabilitado = PhotoImage (file = "BOTON_ON_STANDBY.png")
ImagenBotonParoManualHabilitado = PhotoImage (file = "BOTON_ON_STANDBY.png")
ImagenBotonParoManualSinPulsar = PhotoImage (file = "BOTON_ON_STANDBY.png")
ImagenBotonParoManualPulsado = PhotoImage (file = "BOTON_ON_ROJO.png")
BotonParoManual = tk.Button(raiz, image=ImagenBotonParoManualSinPulsar, command=pulsacionBotonParoManual)
BotonParoManual.config(width="120", height="120")
BotonParoManual.place(x=745, y=140)
 
 
 
######################################################## MODO INSTALADOR (HABILITADO DE MENUS DE CONTROL) ########################################################
# ACTIVACION:
global STModoInstalador
STModoInstalador = tk.BooleanVar()
STModoInstalador.set (False)
global FrameIndicadorModoInstalador
FrameIndicadorModoInstalador = Frame(raiz)
FrameIndicadorModoInstalador.pack()
 
def ActivacionIndicadorModoInstalador():
	global FrameIndicadorModoInstalador
	FrameIndicadorModoInstalador = tk.Label(raiz, text="  MODO INSTALADOR  ", bg="white", fg="black", relief="sunken", bd=2, font=('Tahoma', 10))
	FrameIndicadorModoInstalador.place(x=20, y=20)
 
 
def DesactivacionIndicadorModoInstalador():
	global FrameIndicadorModoInstalador
	FrameIndicadorModoInstalador.destroy()
 
 
def ActivacionModoInstalador():
	if STModoInstalador.get() == True:
		pass
	else:
		ActivacionIndicadorModoInstalador()
		cambioEstadoAlarma1()
		cambioEstadoAlarma2()
		cambioEstadoAlarma3()
		STModoInstalador.set (True)
 
 
def SalirModoInstalador():
	if STModoInstalador.get() == False:
		pass
	else:
		DesactivacionIndicadorModoInstalador()
		cambioEstadoAlarma1()
		cambioEstadoAlarma2()
		cambioEstadoAlarma3()
		STModoInstalador.set (False)
 
 
 
######################################################## CONFIGURACION HILOS DE PROCESOS ########################################################
lock = threading.Lock()
 
HiloDatosArduino = threading.Thread(target=ObtenerDatosArduino)
HiloDatosArduino.start()
 
def contadorHilosActivos():
	threading.active_count()
	print ("Hilos activos: " + str(threading.active_count()))
 
 
 
 
######################################################## LETREROS DE DISPOSITIVOS ########################################################
FrameLetreroAlarma1=Frame(raiz)
FrameLetreroAlarma1.pack()
FrameLetreroAlarma1 = tk.Label(raiz, text="   ALARMA 1   ", bg="white", fg="black", relief="sunken", bd=2, font=('Tahoma', 10))
FrameLetreroAlarma1.place(x=188, y=95)
 
FrameLetreroAlarma2=Frame(raiz)
FrameLetreroAlarma2.pack()
FrameLetreroAlarma2 = tk.Label(raiz, text="   ALARMA 2   ", bg="white", fg="black", relief="sunken", bd=2, font=('Tahoma', 10))
FrameLetreroAlarma2.place(x=332, y=95)
 
FrameLetreroAlarma3=Frame(raiz)
FrameLetreroAlarma3.pack()
FrameLetreroAlarma3 = tk.Label(raiz, text="   ALARMA 3   ", bg="white", fg="black", relief="sunken", bd=2, font=('Tahoma', 10))
FrameLetreroAlarma3.place(x=476, y=95)
 
FrameRearmeManual=Frame(raiz)
FrameRearmeManual.pack()
FrameRearmeManual = tk.Label(raiz, text="   REARME MANUAL   ", bg="white", fg="black", relief="sunken", bd=2, font=('Tahoma', 10))
FrameRearmeManual.place(x=600, y=95)
 
FrameParoManual=Frame(raiz)
FrameParoManual.pack()
FrameParoManual = tk.Label(raiz, text="  PARO EMERGENCIA  ", bg="white", fg="black", relief="sunken", bd=2, font=('Tahoma', 10))
FrameParoManual.place(x=742, y=95)
 
 
 
######################################################## LETRERO ALARMA 1 ########################################################
STLetreroAlarma1 = tk.BooleanVar()
STLetreroAlarma1.set(False)
 
def LeerEstadoLetreroAlarma1():
	STLetreroAlarma1.get()
	print(STLetreroAlarma1.get())
 
def ActivacionEstadoLetreroAlarma1():
	if STLetreroAlarma1.get() == True:
		pass
	else:
		STLetreroAlarma1.set(True)
		pulsacionBotonParoManual()
 
def ParoEstadoLetreroAlarma1():
	if STLetreroAlarma1.get() == False:
		pass
	else:
		STLetreroAlarma1.set(False)
 
def CambioEstadoLetreroAlarma1():
	if STLetreroAlarma1.get() == False:
		FrameLetreroAlarma1.config (bg="white")
		raiz.update()
	else:
		FrameLetreroAlarma1.config (bg="red")
		raiz.update()
 
 
 
######################################################## LETRERO ALARMA 2 ########################################################
STLetreroAlarma2 = tk.BooleanVar()
STLetreroAlarma2.set(False)
 
def LeerEstadoLetreroAlarma2():
	STLetreroAlarma2.get()
	print(STLetreroAlarma2.get())
 
def ActivacionEstadoLetreroAlarma2():
	if STLetreroAlarma2.get() == True:
		pass
	else:
		STLetreroAlarma2.set(True)
		pulsacionBotonParoManual()
 
def ParoEstadoLetreroAlarma2():
	if STLetreroAlarma2.get() == False:
		pass
	else:
		STLetreroAlarma2.set(False)
 
def CambioEstadoLetreroAlarma2():
	if STLetreroAlarma2.get() == False:
		FrameLetreroAlarma2.config (bg="white")
		raiz.update()
	else:
		FrameLetreroAlarma2.config (bg="red")
		raiz.update()
 
 
 
######################################################## LETRERO ALARMA 3 ########################################################
STLetreroAlarma3 = tk.BooleanVar()
STLetreroAlarma3.set(False)
 
def LeerEstadoLetreroAlarma3():
	STLetreroAlarma3.get()
	print(STLetreroAlarma3.get())
 
def ActivacionEstadoLetreroAlarma3():
	if STLetreroAlarma3.get() == True:
		pass
	else:
		STLetreroAlarma3.set(True)
		pulsacionBotonParoManual()
 
def ParoEstadoLetreroAlarma3():
	if STLetreroAlarma3.get() == False:
		pass
	else:
		STLetreroAlarma3.set(False)
 
def CambioEstadoLetreroAlarma3():
	if STLetreroAlarma3.get() == False:
		FrameLetreroAlarma3.config (bg="white")
		raiz.update()
	else:
		FrameLetreroAlarma3.config (bg="red")
		raiz.update()
 
 
 
######################################################## CERRAR EL SISTEMA ########################################################
def salirSistema():
	DesconexionSistema()
	raiz.destroy()
 
 
 
######################################################## BARRA DE MENÚ ########################################################
fuente = ('Tahoma', 20)
barraMenu=Menu(raiz)
raiz.config(menu=barraMenu)
 
sistemaMenu=Menu(barraMenu, font = fuente, tearoff=0)
sistemaMenu.add_command(label="Activar Modo Instalador", command=ActivacionModoInstalador)
sistemaMenu.add_command(label="Salir Modo Instalador", command=SalirModoInstalador)
sistemaMenu.add_command(label="Contador Hilos Activos", command=contadorHilosActivos)
sistemaMenu.add_command(label="Salir", command=salirSistema)
 
barraMenu.add_cascade(label="Sistema", menu=sistemaMenu)
 
 
 
######################################################## LOOP DE INTERFACE ########################################################
raiz.protocol("WM_DELETE_WINDOW", salirSistema)
raiz.mainloop()
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 2.808
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Cambiar de tamaño fuente de menu

Publicado por tincopasan (1082 intervenciones) el 30/06/2021 05:51:13
la verdad, es que el código en si es muy repitiivo o malo o ilegible,no es con intención de ofender pero es mi opinión, te diré que cambiaría solo en la función de obtener datos, pero, habría que modificar un montón de cosas.
1
2
3
4
5
6
7
8
9
10
11
12
13
def ObtenerDatosArduino():
    serialArduino = serial.Serial(serialPort, baudRate)
    while True:
        global STModoInstalador
        if STModoInstalador.get() == True:
            pass
        else:
            global serialArduino
            LecturaArduino = serialArduino.readline()
            new_LecturaArduino = LecturaArduino.decode("utf-8")
            final_LecturaArduino = new_LecturaArduino.strip()
            print (final_LecturaArduino)
            time.sleep(0.1)

fijate que hay dos cosas importantes: 1) la conexión con arduino la realizo una sola vez, antes del bucle
2) como no hay condición para finalizar el bucle eliminé la desconexión con arduino.
no sé bien que tipo de datos recibís pero la lectura y decodificación parece correcta, salvo que los valores recibidos los quieras como enteros. Con respecto a cerrar la conexión, la usas en otro momento, dicho sea de paso, normalmente la conexión se realiza una sola vez y la desconexión también al cerrar o destruir las ventanas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Jose Manuel
Val: 30
Ha aumentado su posición en 224 puestos en Python (en relación al último mes)
Gráfica de Python

Cambiar de tamaño fuente de menu

Publicado por Jose Manuel (11 intervenciones) el 30/06/2021 11:23:04
Buenos días tincopasan.
Muchas gracias por tu respuesta. No me tomo a mal ni como ofensa lo que me dices del código, ya que estoy empezando y necesito aún aprender muchas cosas.. y gracias a este foro lo estoy consiguiendo poco a poco.
Me gustaría que me comentasen las posibles mejoras que se podrían realizar del código.
La idea global de éste es la siguiente:
Dispongo de 3 botones de alarma que se activarán de forma manual desde la interface. Cada botón envía a Arduino un valor (una letra, que posiblemente no sea la mejor idea, pero me funciona de momento así). Arduino al recibirlo enciende un led de la alarma correspondiente, pero además, el sistema tiene dos estados: OK y PARADO (cada uno también con un led). Si se activa alguna alarma, el estado del sistema también se modifica, por lo que se activa el correspondiente led de alarma y el led de PARADO. Cuando la alarma deja de existir, Python envía el valor correspondiente a Arduino y el led de alarma se apaga, permitiendo poder poner en estado OK el sistema.
Mientras existe una alarma activa, el sistema permanece parado, sólo cuando las alarmas están desactivadas, es posible modificar el sistema a estado OK.
Esta es la parte en la que envío información de Python a Arduino y funciona correctamente.
Adicionalmente, dispongo de 3 botones físicos en la placa de pruebas de Arduino que envían a Python datos (por este motivo también necesito realizar lectura de información en Python). Los botones simulan del mismo modo que los botones de la interface la activación de alarmas, y el proceso debe realizarse del mismo modo.
En caso de que el modo instalador esté activo, los datos que se obtengan de Arduino, no se tendrán en cuenta, ya que sólo se podrá manipular el sistema desde la interface o desde los pulsadores físicos, pero nunca desde los dos puntos simultáneamente.
Espero puedan aportarme alguna solución a mi problema.
Gracias!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar