Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Tkinter Textvariable Entry problema
#1
Buenas:

Tengo este pequeño código de prueba:

Código:
import tkinter as tk
from tkinter import ttk
from datetime import *
from tkinter import messagebox
import time
import calendar
import psycopg2
import threading
from threading import Timer
import os
import sys
import tkinter.font as tkfont
from functools import partial
import subprocess
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders


class Prueba:
     
      def __init__(self):
           
            ###### Ventana Principal #########
           
            self.win = tk.Tk()
            self.win.title('PRUEBAS')
            self.win.geometry('600x400+100+0')
           
            ####### Variables Generales ####### 
            self.num = tk.IntVar()
            self.num = 0
           
            self.num01 = tk.IntVar()
            self.num01 = 0
            ####### Listas Generales #########
           
            self.list01 = []
           
            ####### Funciones Generales #######
           
            def addnum():
                 
                  self.list01.append('ELE')
                  self.ent01.delete(0, tk.END)
                  self.num += 1
                  self.ent01.insert(0, self.num)
                  print(self.list01)
           
            def addnum2():
                 
                  self.list01.append('ELE1')
                  self.ent02.delete(0, tk.END)
                  self.num01 += 1
                  self.ent02.insert(0, self.num01)
                  print(self.list01)
                 
            def quitar():
                  try:
                        self.list01.remove('ELE')
                        self.num -= 1
                        self.ent01.delete(0,tk.END)
                        self.ent01.insert(0, self.num)
                  except:
                        pass
                  print(self.list01)

            ####### Etiquetas Generales #######
           
            ####### Entrys Generales #######
           
            self.ent01 = ttk.Entry(self.win, width=1, textvariable=self.num, font=('Ubuntu', 30))
            self.ent01.grid(row=0, column=1, padx=5, pady=5)
            self.ent01.insert(0, '0')
           
            self.ent02 = ttk.Entry(self.win, width=1, textvariable=self.num01, font=('Ubuntu', 30))
            self.ent02.grid(row=1, column=1, padx=5, pady=5)
            self.ent02.insert(0, '0')
           
            ####### Botones Generales ##########
           
            self.but01 = ttk.Button(self.win, text='ELE', command=addnum)
            self.but01.grid(row=0, column=0, padx=5, pady=5)
           
            self.but02 = ttk.Button(self.win, text='ELE1', command=addnum2)
            self.but02.grid(row=1, column=0, padx=5, pady=5)
           
            self.but03 = ttk.Button(self.win, text='-', width=1, command=quitar)
            self.but03.grid(row=0, column=2, padx=5, pady=5)
           
           
                       
            self.win.mainloop()
         

def main():
    myapp = Prueba()

if __name__ == '__main__':
    main()

Bien, el problema es que cuando clickeas cualquiera de los botones el incremento del número se refleja en los dos entrys y debería hacerlo solo en uno de ellos dependiendo del botón que clickeases y no entiendo muy bien el por qué. Son dos variables distintas del tipo IntVar. No lo entiendo.

Muchas Gracias.
Responder
#2
Hola.

Las variables de Tk (tk.IntVar, tk.StringVar, etc.) funcionan con los métodos get() y set(), a diferencia de las variables tradicionales de Python. Chequeá el ejemplo al final de este artículo: https://recursospython.com/guias-y-manua...y-tkinter/. Así, la inicialización de tus variables debería ser:

Código:
####### Variables Generales #######  
self.num = tk.IntVar()
self.num.set(0)

self.num01 = tk.IntVar()
self.num01.set(0)

Y luego la función:

Código:
def addnum():
      self.list01.append('ELE')
      self.num.set(self.num.get() + 1)
      print(self.list01)

Como la variable self.num está asociada a la caja de texto, cada vez que cambies el valor de la variable Tk actualizará el contenido de la caja.

Saludos
¡No te pierdas nuestro curso oficial en Udemy para aprender Python, bases de datos SQL, orientación a objetos, tkinter y mucho más!

También ofrecemos consultoría profesional de desarrollo en Python para personas y empresas.
Responder
#3
(23-08-2021, 09:17 PM)Francisco escribió: Hola.

Las variables de Tk (tk.IntVar, tk.StringVar, etc.) funcionan con los métodos get() y set(), a diferencia de las variables tradicionales de Python. Chequeá el ejemplo al final de este artículo: https://recursospython.com/guias-y-manua...y-tkinter/. Así, la inicialización de tus variables debería ser:

Código:
####### Variables Generales ####### 
self.num = tk.IntVar()
self.num.set(0)

self.num01 = tk.IntVar()
self.num01.set(0)

Y luego la función:

Código:
def addnum():
      self.list01.append('ELE')
      self.num.set(self.num.get() + 1)
      print(self.list01)

Como la variable self.num está asociada a la caja de texto, cada vez que cambies el valor de la variable Tk actualizará el contenido de la caja.

Saludos

Joer. No me acordaba que los métodos set() y get() son para las variables tk.(La verdad es que hacía mucho que no necesitaba usarlas y claro de no usarlo se olvida)

Muchas gracias Francisco.
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)