Forum >> Programmazione Python >> GUI >> TKinter passaggio variabili da Classe a codice

Pagina: 1

Ciao a Tutti

Sono ai primi approcci con Python

Non sono digiuno del tutto, nel mio lavoro ho programmato PLC HMI CN

Migliaia di righe di linguaggio strutturato

L'applicazione che sto tentando di sviluppare parte ovviamente da una interfaccia. Girovagando sul WEB ho trovato PAGE.

Un bellissimo strumento che mi ha riportato alle IDE per sviluppare le HMI delle macchine su cui ho lavorato.


Fatta l'interfaccia necessita tirar fuori le variabili .. e qui mi sono arenato

Ho dei RadioButton che valgono 1 2 3 ed il valore è su "RadioValue"

PAGE genera un file con l'interfaccia vera e propria ed un file support

Di seguito uno stralcio del codice dell'interfaccia

===========

class PAGINA:
def __init__(self, top=None):

top.geometry("940x950+308+104")
top.minsize(940, 950)
top.maxsize(1924, 1061)
top.resizable(1, 1)
top.title("XXXXX")
top.configure(background="#d9d9d9")
top.configure(highlightbackground="#d9d9d9")
top.configure(highlightcolor="black")

self.top = top
# VARIABILI DA UTILIZZARE
self.TestoDaInviare = tk.StringVar()
self.PostName = tk.StringVar()
self.TestoRicevuto = tk.StringVar()
self.RadioValue = tk.IntVar()

##################################
self.RadiobuttonNP = tk.Radiobutton(self.top)
self.RadiobuttonNP.place(relx=0.394, rely=0.926, relheight=0.032, relwidth=0.117)
#------------ omissis
self.RadiobuttonNP.configure(text='''NON Partiti''')
self.RadiobuttonNP.configure(value='1')
self.RadiobuttonNP.configure(variable=self.RadioValue)

self.RadiobuttonRIT = tk.Radiobutton(self.top)
self.RadiobuttonRIT.place(relx=0.532, rely=0.926, relheight=0.032, relwidth=0.117)
#----------- omissis
self.RadiobuttonRIT.configure(text='''RITIRATI''')
self.RadiobuttonRIT.configure(value='2')
self.RadiobuttonRIT.configure(variable=self.RadioValue)

self.RadiobuttonMESS = tk.Radiobutton(self.top)
self.RadiobuttonMESS.place(relx=0.67, rely=0.926, relheight=0.032, relwidth=0.13 8)
#------------- omissis
self.RadiobuttonMESS.configure(text='''MESSAGGIO''')
self.RadiobuttonMESS.configure(value='3')
self.RadiobuttonMESS.configure(variable=self.RadioValue)
#
# omissis
#

def start_up():
pkt_gui_rcs_support.main()

if __name__ == '__main__':
pkt_gui_rcs_support.main()


===================================

Di seguito il sorgente del vero e proprio programma

==============================


import sys
import tkinter as tk
import tkinter.ttk as ttk
from tkinter.constants import *

import pkt_gui_rcs

_debug = True # False to eliminate debug printing from callback functions.

def main(*args):
'''Main entry point for the application.'''
global root
root = tk.Tk()
root.protocol( 'WM_DELETE_WINDOW' , root.destroy)
# Creates a toplevel widget.
global _top1, _w1
_top1 = root
_w1 = pkt_gui_rcs.PAGINA(_top1)
root.mainloop()

def Messaggio(*args):
StampaRadioValue()
if _debug:
print('pkt_gui_rcs_support.Messaggio')
for arg in args:
print (' another arg:', arg)
sys.stdout.flush()

def NonPartiti(*args):
StampaRadioValue()
if _debug:
print('pkt_gui_rcs_support.NonPartiti')
for arg in args:
print (' another arg:', arg)
sys.stdout.flush()

def Ritirati(*args):
StampaRadioValue()
if _debug:
print('pkt_gui_rcs_support.Ritirati')
for arg in args:
print (' another arg:', arg)
sys.stdout.flush()

def StampaRadioValue():
print('RadioValue = ', ????? RadioValue ??? ) # Qui non riesco a visualizzare la variabile RadioValue

def sendbeacon(*args):
if _debug:
print('pkt_gui_rcs_support.sendbeacon')
for arg in args:
print (' another arg:', arg)
sys.stdout.flush()

def sendtext(*args):
if _debug:
print('pkt_gui_rcs_support.sendtext')
for arg in args:
print (' another arg:', arg)
sys.stdout.flush()

if __name__ == '__main__':
pkt_gui_rcs.start_up()
===============================


Modificando la riga in



def StampaRadioValue():

print('RadioValue = ', _w1.RadioValue)




restituisce RadioValue = PY VAR3





Una volta che riesco a portar lì quella variabile poi per assonanza tiro fuori anche il resto

Ringrazio quanti potranno darmi l'imbeccata giusta





--- Ultima modifica di Pietro Bruno Lancerotto in data 2024-01-24 20:20:44 ---
--
Bruno L.
Allegati
Ciao @Lancerotto




A quanto vedo, Ti stai avventurando su di una strada piena di spine, i GUI-Editor (tipo PAGE) sono un ottimo modo per NON imparare a gestire le le cose ed ad incasinare il codice correndo dietro ai loro artefatti. Personalmente non li uso più da quando abbandonai il VisualBasic alla fine degli anni '90 e già in java preferivo crearmi le finestre da codice, ho visto la Tua finestra, se vuoi Ti faccio un esempio su come crearla direttamente da codice, è un discorso inizialmente frustrante ma molto più efficace se acquisito.




Venendo al Tuo problema: modifica in questo modo la funzione "StampaRadioValue()":

def StampaRadioValue():
    # Qui non riesco a visualizzare la variabile RadioValue
    print(f'RadioValue = {_w1.RadioValue.get()}')

Vedrai che il valore corrispondente al radiobutton selezionato verrà stampato, fai sapere.




La difficoltà che Tu trovi mi fa supporre che non hai ancora studiato le classi in python, è così? Se si temo Ti si presenteranno altri problemi, la OOP è un paradigma quasi obbligato con i framework grafici, forse una occhiata alla sezione del tutorial di python relativa alle classi potrebbe essere propedeutica ed utile.

Fatti non foste a viver come bruti...
La difficoltà che Tu trovi mi fa supporre che non hai ancora studiato le classi in python, è così?
E supponi bene

Vengo da un mondo un po' diverso per cui capire certe logiche mi è un po' ostico

Mi sono dotato di alcuni volumi ... leggo leggo ma trovo difficoltà

Forse è proprio perchè si è abituati ragionare in un modo e ci vuole tempo a immedesimarsi

Ho cercato aiuto da un amico (espertissimo di DB Java e compagnia bella) ma la risposta è stata: Python ?? 0 totale

Vorra dire che mi impegnerò a studiare

Certo che ho preso un libro edito (tradotto) da Amazon così zeppo di errori talmente evidenti che li vedo io che sono un lattante; contestato ... mi hanno restituito il costo e mi hanno detto di tenermelo :(

Approposito ... funziona. Non avevo dubbi

Comunque il get lo ho capito e potevo pensarci; non ho capito la f iniziale

Ma dammi il tempo :) :thinking:

Grazie infinite

--
Bruno L.
Pietro Bruno Lancerotto said @ 2024-01-25 08:16:20:
...
Vengo da un mondo un po' diverso per cui capire certe logiche mi è un po' ostico
...
Comunque il get lo ho capito e potevo pensarci; non ho capito la f iniziale


Il capitolo 9 del tutorial potrebbe aiutarti (l'intero tutorial di più) sulla OOP, a suo tempo ho trovato molto istruttivo il libro del De Sio "Object Oriented && Java 5", tratta java ma i concetti base ci sono tutti, il lo comprai cartaceo ma attualmente l'autore ha reso disponibile il pdf per il download, lo trovi in fondo a questa pagina, impegnativo ma una occhiata la darei.

Riguardo alla "f" indica che è una stringa formattata, una comodità per facilitare l'output, man mano che procederai nella consultazione della documentazione python troverai una enormità di piccoli strumenti utili ;)




Ciao

Fatti non foste a viver come bruti...


Pagina: 1



Esegui il login per scrivere una risposta.