Tkinter Canvas不会通过itemconfig更新颜色更改

时间:2016-02-24 10:46:30

标签: python canvas tkinter

我正在开发一个项目,该项目处理一种地图,其中有一些行作为路径。这些路径可以有两种状态,活动和非活动,具有不同的颜色。有一种方法应该改变填充颜色。 我无法弄清楚为什么我的画布线不会更新。这是我的简化代码:

var test = db.TariffCaclulations.GroupBy(row => new { row.TariffCost })
                .Select(g => new HalfHourlyBillTariffCalculationPOCO()
                {
                    TimePeriodLabel = "eveningAndWeekend",
                    TariffCost = g.Key.TariffCost,
                    TotalUnits = g.Sum(x => x.TotalUnits),
                    TotalMoneyValue = g.Sum(x => x.TotalMoneyValue)
                })
                .ToList();

如果我使用import Tkinter inactive = "#385c61" active = "#7dd5cd" map = Tkinter.Canvas() class GuiPart(object): def __init__(self, master): #some code def initGui(self, master): map = Tkinter.Canvas(left, width=660, height=600, bg="#35424b", bd="0", highlightthickness="0") map.pack() global inactive, active pathA = map.create_line(135, c, 135, e, fill=inactive, width=w) def setActivePath(self): global active, inactive map.itemconfig(pathA, fill=active) map.update_idletasks() map.update() root = Tkinter.Tk() gui = GuiPart(root) gui.initGui(root) gui.setActivePath() root.mainloop() 内的itemconfig更改颜色,它的工作方式应该如此,但后来我必须从另一个类调用initGui,所以它必须是一个自己的方法。 (我知道我两次拨打setActivePath,否则我会收到错误,也必须解决这个问题)

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您需要制作班级的mappathA属性,以便setActivePath可以引用它。这就是为什么你得到错误,你必须创建两个画布。

import Tkinter

inactive = "#385c61"
active = "#7dd5cd"

class GuiPart(object):

    def __init__(self, master):       
        #some code

    def initGui(self, master):                     
        self.map = Tkinter.Canvas(left, width=660, height=600, bg="#35424b", bd="0", highlightthickness="0")
        self.map.pack()    
        global inactive, active
        self.pathA = map.create_line(135, c, 135, e, fill=inactive, width=w)

    def setActivePath(self):
        global active, inactive
        self.map.itemconfig(self.pathA, fill=active)
        self.map.update_idletasks()
        self.map.update()

root = Tkinter.Tk()
gui = GuiPart(root)            
gui.initGui(root)

gui.setActivePath()

root.mainloop()

其他一切对我来说都不错,不过你说这没有解决你的问题。据我所知,self.map.itemconfig(self.pathA, fill=active)正确使用此方法(请参阅herehere),因此您的问题可能超出了您发布的代码。我无法正确测试代码,因为您没有在__init__方法中包含代码,因为在我使用的第六种形式的计算机上只安装了Python 3.4.1。请修改您的问题,以便在__init__方法中包含代码。