Python 如果没有从多个列表框中选择列表框,则在tkinter UI中引发错误消息
“新建项目”按钮打开一个对话框,我可以在其中输入新项目并保存到任一列表框中。必须选择单个列表框项作为条目的目标 我试图在下面的脚本中引入一个函数,该函数检查是否选择了任一列表框中的任何单个项目,如果没有选择,则会出现消息错误 我用checkSelection函数代码尝试了这一点,但它似乎不起作用 这是下面的代码,我尽量把它限制在最少的行Python 如果没有从多个列表框中选择列表框,则在tkinter UI中引发错误消息,python,user-interface,tkinter,listbox,Python,User Interface,Tkinter,Listbox,“新建项目”按钮打开一个对话框,我可以在其中输入新项目并保存到任一列表框中。必须选择单个列表框项作为条目的目标 我试图在下面的脚本中引入一个函数,该函数检查是否选择了任一列表框中的任何单个项目,如果没有选择,则会出现消息错误 我用checkSelection函数代码尝试了这一点,但它似乎不起作用 这是下面的代码,我尽量把它限制在最少的行 from tkinter import * from tkinter import messagebox def newItem(): root2 =
from tkinter import *
from tkinter import messagebox
def newItem():
root2 = Tk()
curs1 = lb1.curselection()
curs2 = lb2.curselection()
def checkSelection():
if [curs1, curs2] is False:
messagebox.showerror("error", "Select a List Box stooopid!")
checkSelection()
def saveclose():
a = entry_1.get()
if curs1 is not None:
try:
lb1.insert(curs1, a)
root2.destroy()
except:
pass
if curs2 is not None:
try:
lb2.insert(curs2, a)
root2.destroy()
except:
pass
entry_1 = Entry(root2)
entry_1.grid(row=1, column=0, columnspan=5, rowspan=1, padx=5, pady=2, sticky=EW)
saveButt = Button(root2, text="Ok", command=saveclose)
saveButt.grid(row=6, column=1, sticky=E, padx=2, pady=2)
root2.mainloop()
root = Tk()
newButt = Button(root, text="New Item", command=newItem)
newButt.pack(side=LEFT, padx=2, pady=2)
lb1 = Listbox(root, bg="green")
lb1items = ["ItemNumber1", "ItemNumber2", "ItemNumber3"]
for i in range(len(lb1items)):
try:
lb1.insert(i + 1, lb1items[i])
lb1.pack(side=BOTTOM)
except:
pass
lb2 = Listbox(root, bg="blue")
lb2items = ["lb2 ItemNumber1", "lb2 ItemNumber2", "lb2 ItemNumber3"]
for j in range(len(lb2items)):
try:
lb2.insert(j + 1, lb2items[j])
lb2.pack(side=BOTTOM)
except:
pass
root.mainloop()
您正在使事情复杂化-创建另一个
Tk
实例以请求字符串的调用可以通过使用tkinter.simpledialog
来简化,如下所示:
import tkinter as tk
from tkinter import messagebox, simpledialog
root = tk.Tk()
def newItem():
result = simpledialog.askstring("Add new","Enter new item")
if result and any(s.curselection() for s in (lb1,lb2)):
lb1.insert(tk.END,result) if lb1.curselection() else lb2.insert(tk.END,result)
else:
messagebox.showerror("error", "Select a List Box stooopid!")
newButt = tk.Button(root, text="New Item", command=newItem)
newButt.pack(side=tk.LEFT, padx=2, pady=2)
lb1 = tk.Listbox(root, bg="green")
lb1.pack(side=tk.BOTTOM)
lb1items = ["ItemNumber1", "ItemNumber2", "ItemNumber3"]
lb2 = tk.Listbox(root, bg="blue")
lb2.pack(side=tk.BOTTOM)
lb2items = ["lb2 ItemNumber1", "lb2 ItemNumber2", "lb2 ItemNumber3"]
for a,b in zip(lb1items,lb2items):
lb1.insert(tk.END, a)
lb2.insert(tk.END, b)
root.mainloop()