我正在开发一个项目,该项目处理一种地图,其中有一些行作为路径。这些路径可以有两种状态,活动和非活动,具有不同的颜色。有一种方法应该改变填充颜色。 我无法弄清楚为什么我的画布线不会更新。这是我的简化代码:
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
,否则我会收到错误,也必须解决这个问题)
有什么想法吗?
答案 0 :(得分:0)
您需要制作班级的map
和pathA
属性,以便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)
正确使用此方法(请参阅here和here),因此您的问题可能超出了您发布的代码。我无法正确测试代码,因为您没有在__init__
方法中包含代码,因为在我使用的第六种形式的计算机上只安装了Python 3.4.1。请修改您的问题,以便在__init__
方法中包含代码。