【问题标题】:Selecting values simultaneously from different Tkinter Listbox widgets in Python 3.5在 Python 3.5 中同时从不同的 Tkinter Listbox 小部件中选择值
【发布时间】:2023-04-07 00:45:01
【问题描述】:

我希望我的程序以如下方式运行:

  • 当我从 3 个列表框中的任何一个中单击一个元素以选择相邻的值时(例如:如果我在第一个列表框中选择 0,它应该在第二个列表框中选择值“hello”,在第三个列表框中选择值“world”列表框

感谢This question/answer 我设法让它们同时移动

代码如下:

from tkinter import *

class fase3(Frame):

    def __init__(self, master):


        Frame.__init__(self,master)
        self.master=master
        self.frame=Frame(self.master)

        self.txtm=Label(self, text="example")
        self.txtm.grid(row=1, columnspan=5)

        self.txt1=Label(self, text="1")
        self.txt1.grid(row=2, column=1)

        self.txt2=Label(self, text="2")
        self.txt2.grid(row=2,column=2)

        self.txt3=Label(self, text="3")
        self.txt3.grid(row=2,column=3)
        self.scrlb=Scrollbar(self,orient="vertical")

        self.lista1=Listbox(self,yscrollcommand=self.yscroll1,exportselection=0)
        self.lista1.grid(row=3,column=1)

        self.lista2=Listbox(self, yscrollcommand=self.yscroll2,exportselection=0)
        self.lista2.grid(row=3, column=2)

        self.lista3=Listbox(self, yscrollcommand=self.yscroll3,exportselection=0)
        self.lista3.grid(row=3, column=3)

        #self.scrlb.config(command=self.yview)
        #self.scrlb.grid(row=3, column=4,rowspan=1)
#i chose not to place the scrollbar because it involved frames and it makes the code longer


        for i in range(3):
            self.lista1.insert("end",i)

        self.lista2.insert("end","hello")
        self.lista2.insert("end","pls")
        self.lista2.insert("end","thanks")
        self.lista3.insert("end","world")
        self.lista3.insert("end","help")
        self.lista3.insert("end","alot")

    def yscroll1(self, *args):
        if  self.lista2.yview()!=self.lista1.yview()!=self.lista3.yview():
            self.lista2.yview_moveto(args[0])
            self.lista3.yview_moveto(args[0])
        self.scrlb.set(*args)

    def yscroll2(self, *args):
        if  self.lista1.yview()!=self.lista2.yview()!=self.lista1.yview():
            self.lista1.yview_moveto(args[0])
            self.lista3.yview_moveto(args[0])
        self.scrlb.set(*args)

    def yscroll3(self, *args):
        if self.lista2.yview()!=self.lista3.yview()!=self.lista1.yview():
            self.lista1.yview_moveto(args[0])
            self.lista2.yview_moveto(args[0])
        self.scrlb.set(*args)

    def yview(self, *args):
        self.lista1.yview(*args)
        self.lista2.yview(*args)
        self.lista3.yview(*args)



    self.pack()

root = Tk()

marco= Frame(root, padx=100, pady=50)

marco.pack()

lf = fase3(marco)

root.mainloop()

部分问题是,我已经有一个绑定到每个列表框的函数,当我添加exportselection=0 时,它会选择一个值,因此,例如用户可以选择 ("0","hello","很多”),这对我来说根本没有意义(插入数据库)

我没有在这方面进行任何处理,但是如果它们可以同时移动,那么它们应该可以以某种方式选择相邻的值。

你应该可以复制粘贴它并在 Python 上运行它而不会出现问题,我是在 python 3 中制作的。

【问题讨论】:

  • 那么您的问题是什么?
  • 如何在 Python 3.5 中同时从不同的 Tkinter Listbox 小部件中选择值
  • 到目前为止您尝试了哪些方法,具体有什么问题?到目前为止,我在您的代码中没有看到任何尝试。
  • 我编辑了帖子,所以我可以包括你的要求,很好的观察
  • 您正在为解决方案的哪一部分而苦苦挣扎?我没有看到任何试图修改选择的地方。

标签:
python
tkinter
listbox