Как я могу получить значение записи, когда эта запись была создана для l oop? - PullRequest
0 голосов
/ 09 апреля 2020
from tkinter import * 
import json
import time
import os

os.chdir("C:\\Users\Asus\PycharmProjects\lista de compras")
listai = json.load(open("listai.txt"))
listap = json.load(open("listap.txt"))
listuilabels = []
listuientries = []
listuiaddbuttons = []
listuiremovebuttons = []
listvar = []

def prints(num):
     print(num)
     y = listvar[num]
     y = StringVar()
     print(y)
     print(y.get())


class GUI():
     def __init__(self, lista_de_nomes, lista_de_precos):
          self.lista_de_nomes = listai
          self.lista_de_precos = listap
          for x in range(len(listai)):
               listuilabels.append(f"{listai[x]}label")
               listuientries.append(f"{listai[x]}entry")
               listuiaddbuttons.append(f"{listai[x]}addbutton")
               listuiremovebuttons.append(f"{listai[x]}removebutton")
               listvar.append(f"{listai[x]}var")
     def guis(self, fg, bg, width, relief, padx, pady, font):
          for x in range(1, len(listai) + 1):
               listuilabels[x-1] = Label(mainwindow,text=f"{listai[x-1]} --> {listap[x-1]}€",font=font,fg=fg,bg=bg,width=width).grid(padx=padx,pady=pady,row=x,column=1)
               listuientries[x-1] = Entry(mainwindow,fg=fg,bg=bg,textvariable=listvar[x-1]).grid(padx=padx,pady=pady,row=x,column=2)
               listuiaddbuttons[x-1] = Button(mainwindow,text="Edit",fg="purple",width=5,command=lambda: prints(x-1),relief=relief).grid(padx=padx,pady=pady,row=x,column=4)
               listuiremovebuttons[x-1] = Button(mainwindow,text="Eliminate",fg="red",width=7,command=lambda:print("remove"),relief=relief).grid(pady=pady,row=x,column=5)

Смысл этой программы в том, чтобы составить список покупок, и я застрял в этой части, потому что я сделал для l oop, чтобы создать пользовательский интерфейс, потому что количество предметов может изменяться, если я добавляю или удаляю предметы из списков. Проблема, с которой я работаю, заключается в том, что когда я вызываю функцию с помощью кнопки и вставляю значение: (listvar [x-1]), как указано выше, я сталкиваюсь с некоторыми проблемами:

1st проблема: когда я печатаю (num), чтобы получить (num) значение, я всегда получаю одно и то же значение независимо от того, какую кнопку с text = "add" я нажимаю, и что я хочу, чтобы у каждого было каждое значение, чтобы я мог использовать это значение для получения значения записи

2-я проблема: когда я печатаю значение (y) после передачи его в StringVar (), оно печатает: "PY_VAR0" и значение, которое равно 0, увеличивается 1 каждый раз, когда вы нажимаете кнопку добавления (какая бы кнопка ни была с текстом = «добавить»)

Я получаю эти выходные данные, нажимая любую кнопку с текстом = «Добавить», если попробуйте это, попробуйте нажать несколько раз.

Если какая-либо идентификация неверна, она просто переполнена, когда я скопировал код с моего компьютера

Содержимое файлов:

listai.txt: ["cereja", "banana", "pera", "mac a "," pesse go "," bacalhau "," torresmos "," ananas "," chocapi c "," chocolate "," cereais "] listai.txt список товаров

listap.txt: [1.2, 1.9, 2.3, 3.1, 3.9, 5.6, 6.7, 6.0, 2.9, 3.0, 5.7] listap.txt - список цен

я хочу, чтобы вы, увидевшие этот пост, могли бы сказать мне, если у вас, ребята, есть какие-либо идеи, чтобы я мог исправить эти ошибки, или даже несколько небольших советов очень помогли бы мне хорошо, поскольку я все еще новичок в python. Если требуется какая-либо информация, попросите ее, и я передам ее вам.

mainwindow = Tk()
ui = GUI(listai, listap)
ui.guis("grey","lightgrey",20,GROOVE,8,2,"arial,18")
width = 700
height = 400
xwpos = int(mainwindow.winfo_screenwidth()/2 - width/2)
ywpos = int(mainwindow.winfo_screenheight()/2 - height/2)
mainwindow.geometry(f"{width}x{height}+{xwpos}+{ywpos}")
mainwindow.config(bg="lightgrey")
mainwindow.title("Lista de Compras")
mainwindow.resizable(height = 0, width = 0)
mainwindow.mainloop()
...