Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在listbox/python中保存颜色更改_Python_Python 3.x_Listbox - Fatal编程技术网

在listbox/python中保存颜色更改

在listbox/python中保存颜色更改,python,python-3.x,listbox,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

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

好的,考虑到你最近的改编,这个问题变得更加完整了。然而,这仍然不是一个好消息。这使得很难确定问题的原因

我又一次试图重现你的问题,这一点很清楚。但是,在我的示例中,一旦按下按钮,列表项将保持其颜色。也就是说,我可以将所有列表项涂成黄色。为什么这种情况不会发生,可能有多种原因。。现在很难说。(例如,我想知道:您是否在列表框上设置了显式选择模式?例如,单选、浏览、多选或扩展)


嗯,i.m.o.很不清楚你想达到什么目的。。但是,一般来说,如果您想在循环中保存一些数据,我建议让函数返回所需的数据,或者将其附加到一个外部列表中,但可以从函数内部访问(作为函数参数或(如果绝对必要)作为全局列表)。谢谢您的回答。我添加了一些信息。希望现在更清楚一点。根据您提供的新输入编辑我的答案。感谢您指出了最小、完整和可验证的示例。让我自己更清楚地知道。我只是举了一个清楚的例子。希望现在一切都清楚了:)好的,我也许能帮你,但今天时间不够。快速猜测:尝试将
Lb1.pack()
语句移动到插入的末尾。所以在定义和调用函数之前。看看这是否有帮助。否则,请留下评论,我明天再看一次。不,当我重新启动程序时,行再次变为白色。也许我可以把函数的输出复制到另一个脚本,然后再输入那个脚本?啊,等等。。现在我明白了,你想在应用程序停止后保存颜色。。嗯,让我想一想。。当然,您可以将列表属性存储在一个外部文件中,然后从那里读取它们,但这会很难看。。我从来没有开发过需要在不同的运行中保存数据的程序,但我相信有复杂的方法可以做到这一点。。我相信有一个特定的python库。。让我们看看我是否能找到..啊,是的,看,pickle模块可能就是你要找的。
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()