как я могу скопировать информацию с панели на другую панель? - PullRequest
0 голосов
/ 16 июня 2019

Я новичок в Python, я хочу сделать корзину покупок, и я использую W Python, я беру данные из TXT, и я сделал окно и события кнопки, но когда я добавляю Данные на другую панель, накапливаются только в одной точке

inventario.txt

asiento_manteca
cacahuate_botanero
cacahuate_chapulin
cecina_enchilada
chalupas
chapulin_grande
ciruela_curtida
chocolate_bola_azucarada chocolate_bola_pulida
chocolate_mayordomo
chocolate_mayordomo_licor chocolate_rueda
шоколадная таблетка

window.py

import wx
import wx.lib.scrolledpanel

productos=[]
with open('inventario.txt') as lineas:
    for linea in lineas:
        texto=linea.split()
        productos.append(texto)
        print(texto)

class MiAplicacion(wx.Frame):
    def onButton(self, event):
        button = event.GetEventObject()
        spiner=self.FindWindowByName('s'+button.GetName())
        s=spiner.GetValue()
        combo=self.FindWindowByName('c'+button.GetName())
        print(combo.GetValue())
        print(s)
        p2=self.FindWindowByName('panel')
        p2sz = wx.GridSizer(len(productos),3,2,0) 
        p2sz.Add(wx.StaticText(p2,label=productos[int(button.GetName())][0]),0,wx.ALL)
        p2sz.Add(wx.StaticText(p2,label=str(s)),0,wx.EXPAND)
        p2sz.Add(wx.SpinCtrl(p2,label=combo.GetValue()),0,wx.EXPAND)
        p2.SetSizer(p2sz)


    def __init__ (self,parent,title):
        screenSize = wx.DisplaySize()
        screenWidth = screenSize[0]
        screenHeight = screenSize[1]

        wx.Frame.__init__(self,parent=parent,title=title,size=(screenWidth,screenHeight))

        p1 = wx.lib.scrolledpanel.ScrolledPanel(self,-1,pos=(0,0),size=(screenWidth/2,screenHeight))
        p2 = wx.lib.scrolledpanel.ScrolledPanel(self,-1,pos=(0,screenWidth/2),size=(screenWidth/2,screenHeight/2),name="panel")
        p1.SetBackgroundColour('yellow')
        p2.SetBackgroundColour('blue')
        p1.SetupScrolling()
        p2.SetupScrolling()

        mainsz = wx.BoxSizer(wx.HORIZONTAL)
        p1sz = wx.GridSizer(len(productos),4,2,0)

        for i in range (0,len(productos)):
            p1sz.Add(wx.StaticText(p1,label=productos[i][0]),0,wx.ALL)
            choi=productos[i][1].split('/')
            p1sz.Add(wx.ComboBox(p1,value=choi[0],size=(0,0),choices=choi,name='c'+str(i)),0,wx.EXPAND)
            p1sz.Add(wx.SpinCtrl(p1,initial=0,max=10000,name='s'+str(i)),0,wx.EXPAND)
            b=wx.Button(p1,label = "agregar",name=str(i))
            b.Bind(wx.EVT_BUTTON, self.onButton)
            p1sz.Add(b)

        mainsz.Add(p1,1,wx.ALL,10)
        mainsz.Add(p2,1,wx.ALL,10)    

        p1.SetSizer(p1sz)

        self.SetSizer(mainsz)

        self.Centre(True)
        self.Show()

if __name__=='__main__':
    app=wx.App()
    frame=MiAplicacion(None,u"Oaxaca")
    app.MainLoop()

1 Ответ

0 голосов
/ 16 июня 2019

Ваши данные для inventario.txt неполные или неправильно структурированы.
Я предполагаю, что вы получаете сообщение об ошибке, подобное следующему:

Traceback (most recent call last):
  File "window.py", line 22, in onButton
    p2sz.Add(wx.SpinCtrl(p2,label=combo.GetValue()),0,wx.EXPAND)
TypeError: SpinCtrl(): arguments did not match any overloaded call:
  overload 1: too many arguments
  overload 2: 'label' is not a valid keyword argument

wx.SpinCtrl не имеет label, оно имеет value.
измените эту строку на:

self.p2sz.Add(wx.SpinCtrl(p2,value=str(combo.GetSelection())),0,wx.EXPAND)

Объявить

self.p2sz = wx.GridSizer(len(productos),3,2,0)
p2.SetSizer(self.p2sz)

в __init__ def , а не в обратном вызове onbutton
после этого все ссылки на p2sz должны быть на self.p2sz
На самом деле, вы объявляете p2sz каждый раз, когда нажимаете кнопку.

Если вы не справились с self, вы можете проверить объяснение здесь: https://medium.com/quick-code/understanding-self-in-python-a3704319e5f0

В качестве дополнительного примечания, ваш стиль кодирования для wxPython размерников чрезвычайно старомоден, и я бы посоветовал вам отказаться от любого ресурса, который вы используете, и найти что-то более современное, например. https://wiki.wxpython.org/SizerTutorials

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...