在listbox / python中保存颜色更改

时间:2017-03-24 11:23:18

标签: python python-3.x listbox

我制作了一个收集数据的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()

1 个答案:

答案 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()