wxpython: вставка нескольких строк из одного списка в другой список - PullRequest
2 голосов
/ 27 января 2012

Когда я нажимаю на один из вариантов zone_list в списке timezone1, я хочу вставить эту строку в список time_zones2, а если я выберу другой вариант после этого, я хочу добавить второй вариант во вторую строку списка часовых зон2. Затем, когда я щелкаю один из вариантов, которые я сделал ранее, в списке time_zone2, я хочу удалить этот выбор.

Вот что я хочу сделать: listbox1 нажмите на выбор-> вставить этот выбор в listbox2 listbox2 нажмите на выбор-> удалить этот выбор из listbox2

Посмотрите, что я сделал ниже:

import wx

from time import *

class MyFrame(wx.Frame):
    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, id, title, wx.DefaultPosition, (550, 350))

        zone_list = ['CET', 'GMT', 'MSK', 'EST', 'PST', 'EDT']


        panel = wx.Panel(self, -1)
        self.time_zones = wx.ListBox(panel, -1, (10,100), (170, 130), zone_list, wx.LB_SINGLE)
        self.time_zones.SetSelection(0)

        self.time_zones2 = wx.ListBox(panel, -1, (10,200), (170, 400), '',wx.LB_SINGLE)

        self.Bind(wx.EVT_LISTBOX, self.OnSelect)

    def OnSelect(self, event):

        index = event.GetSelection()
        time_zone = self.time_zones.GetString(index)


        self.time_zones2.Set(time_zone)

class MyApp(wx.App):
    def OnInit(self):
        frame = MyFrame(None, -1, 'listbox.py')
        frame.Centre()
        frame.Show(True)
        return True

app = MyApp(0)
app.MainLoop()

1 Ответ

0 голосов
/ 27 января 2012

Я взял твой код и добавил то, что тебе нужно. Имейте в виду, что wx.ListBox.Set (items) ожидает список элементов, поэтому, когда вы передаете ему одну строку, он будет рассматривать каждый символ строки как отдельный элемент.

import wx

from time import *

class MyFrame(wx.Frame):
    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, id, title, wx.DefaultPosition, (550, 350))
        self.second_zones = []
        zone_list = ['CET', 'GMT', 'MSK', 'EST', 'PST', 'EDT']


        panel = wx.Panel(self, -1)
        self.time_zones = wx.ListBox(panel, -1, (10,100), (170, 130), zone_list, wx.LB_SINGLE)
        self.time_zones.SetSelection(0)

        self.time_zones2 = wx.ListBox(panel, -1, (10,200), (170, 400), '',wx.LB_SINGLE)

        self.Bind(wx.EVT_LISTBOX, self.OnSelectFirst, self.time_zones)
        self.Bind(wx.EVT_LISTBOX, self.OnSelectSecond, self.time_zones2)


    def OnSelectFirst(self, event):
        index = event.GetSelection()
        time_zone = str(self.time_zones.GetString(index))
        self.second_zones.append(time_zone)
        self.time_zones2.Set(self.second_zones)


    def OnSelectSecond(self, event):
        index = event.GetSelection()
        time_zone = str(self.time_zones2.GetString(index))
        self.second_zones.remove(time_zone)
        self.time_zones2.Set(self.second_zones)        


class MyApp(wx.App):
    def OnInit(self):
        frame = MyFrame(None, -1, 'listbox.py')
        frame.Centre()
        frame.Show(True)
        return True

app = MyApp(0)
app.MainLoop()
...