Python (Tkinter)-从列表框创建复选框列表

2023-12-19

我想为每个列表框项目创建一个复选框列表。因此,我创建了一个包含 4 个不同项目的列表框:“一”、“二”、“三”、“四”。我想要每个列表框条目都有相应的复选框项目的列表。当我单击一个列表框条目时,它应该在右侧有一个复选框列表,当我单击另一个列表框条目时,它应该有一个独立于其他列表框项目的复选框列表。所有复选框列表都是相互独立的,这意味着当选择第一个列表框条目时您可以选中 4 个复选框,但是当我选择第二个列表框条目时,它应该显示 0 个选中的项目(因为它们是独立的)。

import tkinter
from tkinter import *


master = tkinter.Tk()
master.geometry("750x500")

listbox = Listbox(master)
listbox.place(x=3,y=0)


for item in ["one", "two", "three", "four"]:
    listbox.insert(END, item)

enable = {'button 1','button 2', 'button 3'}

def onselect(evt):
    # Note here that Tkinter passes an event object to onselect()
    w = evt.widget
    x=0
    index = int(w.curselection()[0])
    value = w.get(index)
    print ('You selected item %d: "%s"' % (index, value))
    for item in enable:
        checkboxes = Checkbutton(master, text=item, variable=item)
        checkboxes.place(x=300,y=0+x)
        x+=50

listbox.bind('<<ListboxSelect>>', onselect)

print(enable)

mainloop()

有趣的问题,我已经研究了 30 分钟。当然有几种方法,这里可能是最短和最动态的:

#!/usr/bin/env python3

import tkinter
from tkinter import *

master = tkinter.Tk()
master.geometry("750x500")

listbox = Listbox(master)
listbox.place(x=3,y=0)

enable = ['button 1', 'button 2', 'button 3']
list_for_listbox = ["one", "two", "three", "four"]

for item in list_for_listbox:
    listbox.insert(END, item)
    for y in enable:
        globals()["var{}{}".format(item, y)] = BooleanVar()
        globals()["checkbox{}{}".format(item, y)] = Checkbutton(master, text=y, variable=globals()["var{}{}".format(item, y)])

def onselect(evt):
    # Note here that Tkinter passes an event object to onselect()
    w = evt.widget
    x=0
    index = int(w.curselection()[0])
    value = w.get(index)
    print ('You selected item %d: "%s"' % (index, value))

    for y in enable:
        for item in list_for_listbox:
            globals()["checkbox{}{}".format(item, y)].place_forget()
        globals()["checkbox{}{}".format(value, y)].place(x=300,y=0+x)
        x+=50

listbox.bind('<<ListboxSelect>>', onselect)

print(enable)

mainloop()

您可以通过以下方式访问变量globals()["var{}{}".format(item, y)]

example:

for item in list_for_listbox:
    for y in enable:
        print(item + " [" + y + "] " + str(globals()["var{}{}".format(item, y)].get()))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python (Tkinter)-从列表框创建复选框列表 的相关文章

随机推荐

  • 如何设置MigraDoc的页面大小?

    抱歉 我只是 PDFsharp 的初学者 如何设置文档的PageSize 就说A4吧 怎么设置呢 这是我的代码 谢谢 Document document new Document Add a section to the document
  • 重复 UIAnimation 块,以及再次停止它的方法

    我想做一个小的加载器动画来放入我的应用程序中 我之前用 CGAnimations 做过重复动画 没有任何问题 这次我采用块方法 我正在做一个小测试 但可以重复以下代码 void startLoading block int count 0
  • 为什么 IE9/Firefox 显示的字体大小与其他浏览器不同?

    我正在对一个网站的 CSS 进行编程 并意识到 Internet Explorer 9 显示的字体大小与其他浏览器 Firefox Chrome Safari IE7 和 IE8 不同 我尝试过使用一些重置 并且我在中指定字体px 但IE9
  • 如何打印类型(Either String (IO String))?

    这是一个非常非常长的故事 我不会让你厌烦 但基本上 我设法让自己处于一种需要能够打印该类型的情况Either String IO String 有什么帮助吗 解决方案是单衬 either print print lt lt 如果你想区分它是
  • 滚动到下一个元素

    我正在努力解决 jquery 或 javascript 问题 它已经很烦人了 这告诉我我可能把这个问题想得太复杂了 所以我的标记 简单的 看起来像这样 div class container My Content a href class
  • 仅将字符串的第一个字母大写[重复]

    这个问题在这里已经有答案了 我已经看过这样的帖子 格式为首字母大写 http forums asp net t 1040231 aspx Format 20to 20first 20letter 20upper 20case 如何将字符串中
  • java比较两个Pattern对象

    有没有一种简单的方法可以比较两个Pattern物体 我有一个Pattern使用正则表达式编译 检查代码中的注释 由于有几个正则表达式来描述注释 我想找到一种方法来区分它们 如何做呢 这Pattern类没有实现equals method 你可
  • Google 货币转换器 API - 会随 iGoogle 一起关闭吗?

    iGoogle 是关闭 https support google com websearch answer 2664197 hl en 有一个 未记录 货币转换 API 其 URL 如下 此网址的基础 google com ig 将您带到
  • C++ 模板尖括号陷阱 - C++11 修复是什么?

    在 C 11 中 现在这是有效的语法 vector
  • 使用 md5 或 sha1 的密码散列仍然有效吗?

    我现在正在做一个金融项目 在这里 团队正在考虑使用MD5 for password hashing 但是 今天很容易复制SHA1 or MD5要解密的密码 包括复杂密码 例如 My uper ecur3PAS word 448 您可以使用在
  • 如何在android中的水平Linearlayout中显示两个带有椭圆形末端的Textview?

    我面临一个问题 那就是 我在一个水平 Linearlayout 中有两个 Textview 一个带有椭圆形结尾的 Textview 当我输入文本更多内容时 它会在 Textview 结尾中显示 但当时我无法显示第二个文本视图 Below I
  • jquery 文本区域的最大字符数

    我有以下代码 但我有点不知道下一步该做什么 这个想法是 当您在文本区域中输入文本时 计数器会告诉您还剩下多少个字符 一旦达到最大字符数 我想停止允许输入字符 或者删除所有输入的字符 这样文本区域中只有 10 个字符 我知道我必须把代码放在它
  • 从 InputConnection 获取 EditText 中所有文本的更好方法?

    我已经编写了一个 IME InputMethodService 我需要从它正在编辑的 EditText 中获取所有文本 我知道一种方法 InputConnection inputConnection getCurrentInputConne
  • 如何使用 Apache HTTPD 从 SSL 证书发送“主题备用名称”数据

    由于包含证书的智能卡 我的用户正在连接到我的应用程序 我正在使用 httpd 来确保证书有效 SSLCACertificateFile SRVROOT conf ssl certs usersCA crt 它工作正常 但我想知道我的用户在服
  • 从JS日期对象获取YYYYMMDD格式的字符串?

    我正在尝试使用 JS 来转date object到一个字符串中YYYYMMDD格式 有没有比串联更简单的方法Date getYear Date getMonth and Date getDay 修改了我经常使用的代码 Date protot
  • 在 Symfony2 中使用 Twig 作为 JavaScript 的 Assetic 过滤器

    有没有办法使用 Twig 作为 Assetic 过滤器 我想要做的是让 Twig 将我的 JavaScript 文件解析为 Twig 模板 然后将它们传递给 Assetic 以便它们在生产中进行组合和缩小 您可能会挠头思考为什么我首先要这样
  • 使用循环语句将两个数相除

    你好 我正在做一个java活动 它将在不使用 运算符的情况下除以两个给定的数字 我想使用循环语句 System out print Enter Divident int ans1 Integer parseInt in readLine S
  • VisJS Timeline:对时间线中的项目进行排序

    我在用着vis js 时间轴 http visjs org docs timeline 用于构建时间线的库 我需要对每个组中的元素进行排序 组就像示例中一样here http visjs org examples timeline grou
  • 类上的对象属性实例?

    举例来说 Food class Bread instance of Food Species class Animal class Horse class Unicorn instance 现在我需要能够设置 Bread gt eatabl
  • Python (Tkinter)-从列表框创建复选框列表

    我想为每个列表框项目创建一个复选框列表 因此 我创建了一个包含 4 个不同项目的列表框 一 二 三 四 我想要每个列表框条目都有相应的复选框项目的列表 当我单击一个列表框条目时 它应该在右侧有一个复选框列表 当我单击另一个列表框条目时 它应