【问题标题】:Python tkinter GUI listboxPython tkinter GUI 列表框
【发布时间】:2020-01-28 08:34:33
【问题描述】:

我想禁用 gui 应用程序上删除所选项目的删除按钮。如果没有做出选择,则应禁用该按钮。有什么办法可以做到吗?生病在下面发布我的代码 `

from tkinter import *
import tkinter
from tkinter import simpledialog
from tkinter import messagebox


def delete():
    if lb1.curselection():
        b= lb1.curselection()[0]
        lb1.delete(first=b,last=None)




B2=Button(root,text="Delete",command=delete)
B2.grid(column=8,row=5)  
k=lb1.curselection()
if k[0]==0:
    B2.config(state = DISABLED)
else:
    B2.config(state = NORMAL)

`

【问题讨论】:

  • 您可以在lb1 上绑定<<ListboxSelect>> 事件,并在绑定回调中根据lb1.curselection() 的结果设置B2 的状态。您还应该在delete() 函数的末尾调用回调。

标签: python tkinter listbox


【解决方案1】:

这里可以使用after方法,如下:

from tkinter import *
import tkinter
from tkinter import simpledialog
from tkinter import messagebox


def delete():
    if lb1.curselection():
        b= lb1.curselection()[0]
        lb1.delete(first=b,last=None)

def check_selection():
    k=lb1.curselection()
    if k:
        B2.config(state = NORMAL)
    else:
        B2.config(state = DISABLED)
    root.after(100, check_selection)

B2=Button(root,text="Delete",command=delete)
B2.grid(column=8,row=5)  

root.after(100, check_selection)

after 方法将继续检查(每 100 毫秒)是否在列表框中进行了选择。

编辑

after 方法中100 的值可以更改为适合您的任何值。只要记住单位是ms

【讨论】:

  • 如果 k[0]==0:IndexError: tuple index out of range
  • 每秒检查 10 次选择是相当低效的。
  • @BryanOakley 是肯定的。我只是建议可以以这种方式检查选择。 OP 可以决定一个特定的值。也许,我应该在答案中写下这个以避免混淆
  • @FrainBr33z3 def Insert(): s=lb1.size() name = simpledialog.askstring("Input","NAME",parent=root) if name is not None: lb1.insert(s+1,name) 因此,使用此功能可以向列表框添加新值,但是当输入为空白并单击 ok 时,列表中会添加空格或空字符串..is有什么办法解决吗?
  • @scshivam 请开始一个新问题。对于有同样问题的其他人来说,它更容易也更有帮助。如果这一项得到回答,请接受答案。
猜你喜欢
  • 1970-01-01
  • 2021-02-12
  • 2017-12-11
  • 1970-01-01
  • 2021-09-18
  • 2020-09-10
  • 1970-01-01
  • 2013-01-07
  • 2012-12-30
相关资源
最近更新 更多