Tkinter rectangle itemconfig填充更新并非每次都有效

Tkinter rectangle itemconfig填充更新并非每次都有效,tkinter,tkinter-canvas,Tkinter,Tkinter Canvas,我对tkinter、canvas和itemconfig有一种奇怪的行为 我有一个小窗口,画布上填充了矩形,每个矩形显示调色板的颜色。我已经为鼠标左键和右键设置了一个事件,LMB选择了一种颜色,RMB将单击的颜色与选择的颜色交换。绑定事件工作正常,因为在此过程中会发生其他操作(实际调色板颜色被交换) 问题是,在第一次单击LMB和RMB时,矩形“填充”不会得到更新(或者至少屏幕上没有刷新),但在第二次单击RMB时,颜色变化会得到反映(但颜色会交换两次) 更新矩形的代码为: app.paletteCa

我对tkinter、canvas和itemconfig有一种奇怪的行为

我有一个小窗口,画布上填充了矩形,每个矩形显示调色板的颜色。我已经为鼠标左键和右键设置了一个事件,LMB选择了一种颜色,RMB将单击的颜色与选择的颜色交换。绑定事件工作正常,因为在此过程中会发生其他操作(实际调色板颜色被交换)

问题是,在第一次单击LMB和RMB时,矩形“填充”不会得到更新(或者至少屏幕上没有刷新),但在第二次单击RMB时,颜色变化会得到反映(但颜色会交换两次)

更新矩形的代码为:

app.paletteCanvas.itemconfig(app.paletteColorBoxes[newColor], fill=transformColor(app,app.drawColor))
app.paletteCanvas.itemconfig(app.paletteColorBoxes[app.drawColor], fill=transformColor(app,newColor))
app是主要应用程序,paletteCanvas是包装在“调色板窗口”中的画布,在app.PaletteColorBox中,我保留矩形的索引以进行更改,newColor和app.drawColor是原始颜色和要交换的颜色,最后transformColor仅转换a(R,G,B)将内容转换为#RRGGBB字符串,以便itemconfig理解

因此,一切似乎都正常工作,除了第一次调用例程时刷新没有完成,但第二次调用时刷新完成

我尝试了各种各样的.update()和.update_idletasks(),但没有成功

要完全测试此行为,您可以在以下位置检查完整的应用程序:

行为不端的函数位于retrofunctions.py/swapColor中

你需要打开一个图像,点击一些颜色并选择“Tile Viewer/Editor”,工具完成后(可能会失败,仍然是WIP),你会看到调色板窗口

谢谢


顺便说一句,如果有帮助的话,我使用的是Python 3.6.3。

好的,所以最后的问题不是tkinter,而是传递给itemconfig方法的值有误……我的错

请不要发布指向完整应用程序的链接。没有人愿意费力地阅读成百上千行的代码。相反,创建一个小的。