从一个列表框移动到另一个 tkinter

动态Q

我一直在尝试制作一个两个列表框小部件来从一个到另一个选择、添加和删除项目。

像这样:http : //www.contextures.com/images/listboxmoveuserform01.png

到目前为止,它按预期工作,但我希望它不添加其他列表框中已经存在的列表项。

到目前为止,我的代码对于按钮命令:

def all_to_right(self):
    self.Scrolledlistbox2.delete(0,END)
    for item in self.updatescrolledlistbox():
        self.Scrolledlistbox2.insert(END,item)

def all_to_left(self):
    self.Scrolledlistbox2.delete(0,END)

def one_to_right(self):
    index=self.Scrolledlistbox1.curselection()
    for x in index:
        d=self.Scrolledlistbox1.get(x)
        self.Scrolledlistbox2.insert(END,d)

def one_to_left(self):
    index=self.Scrolledlistbox2.curselection()
    print(index)
    for x in index:
        self.Scrolledlistbox2.delete(x,END)

目前它在选择 1,2,3 并单击按钮两次时执行:

List1    List2    List1    List2
1        1        1        1 
2        2        2        2
3        3        3        3 
4                 4        1
5                 5        2
                           3

我希望它不再重复相同的元素,如果它已经存在于另一个列表框中。

常识

您可以使用list对象和listvariable参数的力量这里的主要逻辑 - 通过 StringVar 抓取和连接列表并填充列表框。

try:
    import tkinter as tk
except ImportError:
    import Tkinter as tk


class App(tk.Tk):
    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)
        self.resizable(width=False, height=False)

        # list variables
        self.list_var1 = tk.StringVar()
        self.list_var2 = tk.StringVar()

        # main frame
        self.main_frame = tk.Frame(self)

        self.listbox1 = tk.Listbox(self.main_frame, listvariable=self.list_var1, selectmode='multiple')
        self.listbox2 = tk.Listbox(self.main_frame, listvariable=self.list_var2, selectmode='multiple')

        # little button frame
        self.button_frame = tk.Frame(self.main_frame)

        self.all_to_right_button = tk.Button(self.button_frame, text='>>', command=self.move_to_right)
        self.one_to_right_button = tk.Button(self.button_frame, text='>', command=lambda: self.move_to_right(True))
        self.one_to_left_button = tk.Button(self.button_frame, text='<', command=lambda: self.move_to_left(True))
        self.all_to_left_button = tk.Button(self.button_frame, text='<<', command=self.move_to_left)

        # packing
        self.all_to_right_button.pack()
        self.one_to_right_button.pack()
        self.one_to_left_button.pack()
        self.all_to_left_button.pack()

        self.listbox1.pack(side='left', anchor='w')
        self.button_frame.pack(side='left')
        self.listbox2.pack(side='right', anchor='e')
        self.main_frame.pack()

        # insert default values
        self.init_default_values()

    def init_default_values(self):
        self.list_var1.set(value=[1, 2, 3, 4, 5])
        self.list_var2.set(value=[1, 2, 3])

        # you can test with literals
        # self.list_var1.set(value=['A', 'B', 'C', 'D', 'E'])
        # self.list_var2.set(value=['A', 'B', 'C'])

    def move_to_right(self, only_one_item=False):

        if self.listbox1.curselection() == ():
            return

        # get tuple of selected indices
        if only_one_item:
            selection = (self.listbox1.curselection()[0],)
        else:
            selection = self.listbox1.curselection()

        # left all/selected values
        left_value_list = [line.strip(' \'') for line in self.list_var1.get()[1:-1].split(',')]
        left_selected_list = [left_value_list[index] for index in selection]

        # values from right side
        right_value_list = [line.strip(' \'') for line in self.list_var2.get()[1:-1].split(',')]

        # merge w/o duplicates
        result_list = sorted(list(set(right_value_list + left_selected_list)))

        self.list_var2.set(value=result_list)

    def move_to_left(self, only_one_item=False):

        if self.listbox2.curselection() == ():
            return

        # get tuple of selected indices
        if only_one_item:
            selection = (self.listbox2.curselection()[0],)
        else:
            selection = self.listbox2.curselection()

        # right all/selected values
        right_value_list = [line.strip(' \'') for line in self.list_var2.get()[1:-1].split(',')]
        right_selected_list = [right_value_list[index] for index in selection]

        # values from left side
        left_value_list = [line.strip(' \'') for line in self.list_var1.get()[1:-1].split(',')]

        # merge w/o duplicates
        result_list = sorted(list(set(left_value_list + right_selected_list)))

        self.list_var1.set(value=result_list)

app = App()
app.mainloop()

链接:

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Tkinter中将多个项目从一个列表框移动到另一个列表框?

来自分类Dev

Tkinter:如何将项目动态插入另一个列表框?

来自分类Dev

如何在另一个类的Tkinter列表框中添加数据?

来自分类Dev

Tkinter列表框以蓝色突出显示一个元素,但在另一个周围放置黑色边框?

来自分类Dev

将项目从一个列表框移动到另一个列表-C#

来自分类Dev

如何使用C#将一个或多个值从一个列表框移动到另一个列表框

来自分类Dev

Python和Tkinter,将列表信息从一个函数传递到另一个函数

来自分类Dev

从一个类到另一个tkinter使用变量

来自分类Dev

通过 jquery 将项目从一个列表框移动到另一个列表框

来自分类Dev

如何将在tkinter的输入框中输入的文本从一个函数传递给另一个函数?

来自分类Dev

Tkinter列表框如何判断是否选择了一个项目

来自分类Dev

_tkinter.TclError:当我点击列表框中的一个项目时

来自分类Dev

将项目从一个列表框移动到另一个列表框时,如何添加到进入第二个列表框的字符串中?

来自分类Dev

Python Tkinter-如何从一个函数到另一个函数使用值?

来自分类Dev

如何从一个类到另一个Tkinter窗口中获取变量

来自分类Dev

Python Tkinter-如何从一个函数到另一个函数使用值?

来自分类Dev

Tkinter-框架滚动到另一个框架?

来自分类Dev

使用旋转框值作为另一个旋转框的文本变量(tkinter)

来自分类Dev

C:将元素从一个列表移动到另一个列表

来自分类Dev

Python Tkinter:传递列表参数以填充另一个列表

来自分类Dev

将焦点从一个列表框移到另一个列表框

来自分类Dev

Tkinter-来自另一个类的.get()

来自分类Dev

在python Tkinter中的另一个框架内

来自分类Dev

在 tkinter 类中创建另一个窗口

来自分类Dev

无法在tkinter python中的另一个窗口中访问列表

来自分类Dev

如何使用python tkinter调用一个窗口到另一个窗口

来自分类Dev

在Tkinter中滚动一个小部件与另一个小部件

来自分类Dev

如何从另一个类正确访问一个类的 StringVar() - Python - tkinter

来自分类Dev

如何通过单击具有多个框架的 tkinter 程序中的按钮将变量从一个类的 __init__ 传递到另一个类?

Related 相关文章

  1. 1

    如何在Tkinter中将多个项目从一个列表框移动到另一个列表框?

  2. 2

    Tkinter:如何将项目动态插入另一个列表框?

  3. 3

    如何在另一个类的Tkinter列表框中添加数据?

  4. 4

    Tkinter列表框以蓝色突出显示一个元素,但在另一个周围放置黑色边框?

  5. 5

    将项目从一个列表框移动到另一个列表-C#

  6. 6

    如何使用C#将一个或多个值从一个列表框移动到另一个列表框

  7. 7

    Python和Tkinter,将列表信息从一个函数传递到另一个函数

  8. 8

    从一个类到另一个tkinter使用变量

  9. 9

    通过 jquery 将项目从一个列表框移动到另一个列表框

  10. 10

    如何将在tkinter的输入框中输入的文本从一个函数传递给另一个函数?

  11. 11

    Tkinter列表框如何判断是否选择了一个项目

  12. 12

    _tkinter.TclError:当我点击列表框中的一个项目时

  13. 13

    将项目从一个列表框移动到另一个列表框时,如何添加到进入第二个列表框的字符串中?

  14. 14

    Python Tkinter-如何从一个函数到另一个函数使用值?

  15. 15

    如何从一个类到另一个Tkinter窗口中获取变量

  16. 16

    Python Tkinter-如何从一个函数到另一个函数使用值?

  17. 17

    Tkinter-框架滚动到另一个框架?

  18. 18

    使用旋转框值作为另一个旋转框的文本变量(tkinter)

  19. 19

    C:将元素从一个列表移动到另一个列表

  20. 20

    Python Tkinter:传递列表参数以填充另一个列表

  21. 21

    将焦点从一个列表框移到另一个列表框

  22. 22

    Tkinter-来自另一个类的.get()

  23. 23

    在python Tkinter中的另一个框架内

  24. 24

    在 tkinter 类中创建另一个窗口

  25. 25

    无法在tkinter python中的另一个窗口中访问列表

  26. 26

    如何使用python tkinter调用一个窗口到另一个窗口

  27. 27

    在Tkinter中滚动一个小部件与另一个小部件

  28. 28

    如何从另一个类正确访问一个类的 StringVar() - Python - tkinter

  29. 29

    如何通过单击具有多个框架的 tkinter 程序中的按钮将变量从一个类的 __init__ 传递到另一个类?

热门标签

归档