如果没有从多个列表框中选择列表框,则在 tkinter UI 中引发错误消息
Raise error message in tkinter UI if no listbox selection from multiple Listboxes
新项目按钮打开一个对话框,我可以在其中输入新项目并保存到任一列表框中。必须选择单个列表框项目作为条目的目标。
我试图在下面的脚本中引入一个函数,该函数检查是否选择了任一列表框中的任何单个项目,如果没有选择则出现消息错误。
我尝试使用 checkSelection 函数代码进行此操作,但它似乎不起作用。
这是下面的代码,我尽量将它保持在尽可能少的行数。
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()
您正在使事情复杂化 - 可以通过使用 tkinter.simpledialog
来简化创建 Tk
的另一个实例以请求字符串的调用,如下所示:
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()
新项目按钮打开一个对话框,我可以在其中输入新项目并保存到任一列表框中。必须选择单个列表框项目作为条目的目标。
我试图在下面的脚本中引入一个函数,该函数检查是否选择了任一列表框中的任何单个项目,如果没有选择则出现消息错误。
我尝试使用 checkSelection 函数代码进行此操作,但它似乎不起作用。
这是下面的代码,我尽量将它保持在尽可能少的行数。
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()
您正在使事情复杂化 - 可以通过使用 tkinter.simpledialog
来简化创建 Tk
的另一个实例以请求字符串的调用,如下所示:
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()