【问题标题】:Tkinter rectangle itemconfig fill update does not work every timeTkinter 矩形 itemconfig 填充更新每次都不起作用
【发布时间】:2017-11-14 22:13:27
【问题描述】:

我对 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.paletteColorBoxes 中我保留要更改的矩形的索引,newColor 和 app.drawColor 是要交换的原始颜色和颜色,最后 transformColor 只是将 (R,G,B) 事物转换为 #RRGGBB 字符串以供 itemconfig 理解。

所以,一切似乎都正常,除了第一次调用例程时刷新未完成,但在第二次调用时刷新完成。

我尝试了各种 .update() 和 .update_idletasks() 但没有运气。

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

https://github.com/zayamatias/retrotool

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

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

谢谢!

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

【问题讨论】:

  • 请不要发布完整申请的链接。没有人愿意涉足成百上千行代码。相反,创建一个小的minimal reproducible example

标签: tkinter tkinter-canvas


【解决方案1】:

好的,所以最后问题不在于 tkinter,而是传递给 itemconfig 方法的值混淆了......我的错!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-06
    • 1970-01-01
    • 2020-12-15
    • 1970-01-01
    • 1970-01-01
    • 2012-09-03
    相关资源
    最近更新 更多