我制作了一个收集数据的gui,数据保存在sqlite3中并显示在列表框中。
制作一个函数,向用户发送包含所选行数据的邮件,并将该行的颜色设置为黄色。
问题是该程序不保存这些颜色更改。当我再次退出并运行程序时,颜色会再次变回白色。
做了一个简单的例子来说明问题:
from tkinter import *
top = Tk()
top.geometry("800x400+0+0")
Lb1 = Listbox(top)
Lb1.insert(1, "Python")
Lb1.insert(2, "Perl")
Lb1.insert(3, "C")
Lb1.insert(4, "PHP")
Lb1.insert(5, "JSP")
Lb1.insert(6, "Ruby")
Lb1.pack()
def color_yellow():
Lb1.itemconfig(Lb1.curselection()[0], {'bg':'Yellow'})
b1=Button(top,text="color row Yellow",width=16,command=color_yellow)
b1.place(relx=0.5, rely=0.6, anchor=CENTER)
top.mainloop()
尝试用泡菜但不能正常工作:
from tkinter import *
import pickle
top = Tk()
top.geometry("800x400+0+0")
Lb1 = Listbox(top)
Lb1.insert(1, "Python")
Lb1.insert(2, "Perl")
Lb1.insert(3, "C")
Lb1.insert(4, "PHP")
Lb1.insert(5, "JSP")
Lb1.insert(6, "Ruby")
Lb1.pack()
def color_yellow():
Lb1.itemconfig(Lb1.curselection()[0], {'bg':'Yellow'})
return
pickle_out = open("dict.pickle","wb")
pickle.dump(color_yellow, pickle_out)
pickle_out.close()
pickle_in = open("dict.pickle","rb")
color_yellow = pickle.load(pickle_in)
b1=Button(top,text="color row Yellow",width=16,command=color_yellow)
b1.place(relx=0.5, rely=0.6, anchor=CENTER)
top.mainloop()
答案 0 :(得分:0)
修改强>
好的,所以考虑到你的最新改编,这个问题已经变得更加完整了。但是,它仍然不是minimum, complete, and verifiable example。这使得很难确定导致问题的原因。
通过另一次尝试,我已经明确了重新创建你的问题。但是,在我的示例中,列表项在按下按钮后保持其颜色。意思是,我能够将所有列表项目着色为黄色。为什么这不会发生,你可能有多种原因..现在很难说。 (我想知道例如:你是否可以在列表框上设置一个明确的选择模式?例如SINGLE,BROWSE,MULTIPLE或EXTENDED)
from tkinter import * # Asterix import for test purposes, try to avoid copying this.
master = Tk()
listbox = Listbox(master)
listbox.pack()
listbox.insert(END, "a list entry")
for item in ["one", "two", "three", "four"]:
listbox.insert(END, item)
def select(listbox):
listbox.itemconfig(listbox.curselection()[0], bg='yellow')
button = Button(master, text='Select', command=lambda: select(listbox))
button.pack()
mainloop()