问题标签 [tkinter-canvas]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
690 浏览

python - tkinter 根窗口的大小不太合适

我正在创建一个 tkinter 画布,我需要检查用户何时更改窗口的大小。问题是,最初窗口显然不是它应该的大小。我有以下内容:

运行时,我得到:

一秒钟后:

忽略 tkinter 会增加 6 个像素的事实,为什么大小先是 1,然后是 306?我设置错了吗?

0 投票
4 回答
43877 浏览

python - 如何在 Canvas 上的 Tkinter 中打开 PIL 图像

我似乎无法让我的 PIL Image 在画布上工作。代码:

错误:

我需要使用 PIL 图像而不是 PhotoImages,因为我想调整图像大小。请不要因为我想使用 Tkinter 而建议切换到 Pygame。

0 投票
1 回答
1755 浏览

python - 在不使用滚动条的情况下移动 Python 画布

背景:
我有一个使用 Tkinter 作为 GUI 基础的程序。该程序有一个画布,其中填充了大量的对象。目前,为了移动屏幕上的所有对象,我只是将一个移动函数绑定到标签“all”,这当然会移动屏幕上的所有对象。然而,跟踪所有画布对象的位置对我来说至关重要——即在每次移动之后我都会记录新的位置,这似乎不必要地复杂。

问题:
仅使用鼠标(不使用滚动条)有效滚动/拖动整个画布(屏幕大小的几倍)的最佳方法是什么?

我的尝试:
我已经实现了滚动条,并找到了几个设置滚动条的指南,但没有一个涉及这个特殊要求。

不使用的滚动条方法示例:

我的特殊问题

我的程序生成所有画布对象坐标,然后绘制它们。这些物体以不同的模式排列,但至关重要的是,它们必须“知道”彼此的位置。当使用@abarnert 提供的方法在画布上移动时,以及我编写的移动所有画布对象的类似方法时,出现的问题是每个对象都“认为”它位于绘制对象之前生成的画布坐标处。例如,如果我将画布向左拖动 50 像素并单击程序中的一个对象,它会向右跳 50 像素回到它的原始位置。我对此的解决方案是编写一些代码,在释放鼠标按钮时,记录最后一个位置并更新每个对象的坐标数据。但是,我' 我正在寻找删除最后一步的方法-我希望有一种方法可以移动画布,使对象位置是绝对的,并假设类似于“滚动”功能的功能可以做到这一点。我意识到我在这里闲逛了,但是我在上面的示例中添加了几行突出显示我的问题的行 - 通过移动画布,您可以看到坐标发生了变化。再次感谢你。

0 投票
2 回答
11947 浏览

python - How to make a Button using the tkinter Canvas widget?

I want to obtain a button out of a Canvas. I've tried to pack the canvas in the button widget, but that didn't work. Googling a bit, I've found (here: How do you create a Button on a tkinter Canvas?) that the Canvas method create_window might help. But there should be something wrong in the way I'm using it.

If I erase the create_window line, I can se my painting but I can't (obviously) click on it. But in this way, the button widget cover my circle and shows a sad empty button.

Basically, I want to create a button with a red circle painted inside.

0 投票
1 回答
1817 浏览

python - 如何将 TKinter 画布线从虚线更改为实线?

在我的 Python 脚本中,我最初创建了一条实线画布线。然后在某个事件下,我使用以下语法将行更改为破折号。

将其更改回实线的命令是什么?

0 投票
1 回答
10979 浏览

python - 使用鼠标移动 tkinter 画布

我想Canvas用鼠标单击(按住)+鼠标移动来移动整个 tkinter。我试过了,canvas.move但不幸的是它不起作用。

如何滚动整个画布?(不移动画布的每个元素,而是滚动画布的显示区域)

0 投票
1 回答
160 浏览

python - 使用 Tkinter 快速制作圆圈日志

我想在 Tkinter 画布上绘制多达 86,000 个(小圆圈)。平均而言,它将更像是 8,600 个圆圈。有时只有 400 个。一次绘制的所有圆圈都是相同的(大小、颜色)。圆的半径与要绘制的圆的数量有关(当要绘制的圆很多时只有 1-2px),但半径的差异对整体影响不大。

canvas.create_oval(px+r,py+r,px-r,py-r,fill='green')计算时间相当昂贵。理想情况下,我会预先创建圆圈并根据需要将其副本粘贴到画布上。

目前调用canvas.create_oval(...)86,000 次需要将近 20 秒。(决定在不到 100 毫秒的时间内绘制哪个圆圈的逻辑。)

我将如何去复制一个圆圈而不是单独创建它们?

0 投票
1 回答
5630 浏览

python - matplotlib 在 tkinter 画布中的缩放功能

我一直在尝试在 GUI 后面传输一些脚本(使用 Tkinter),到目前为止,所有打开的数据都显示在 Tkinter 画布中(使用 matplotlib 绘制它)。

我遇到的唯一问题是 matplotlib 中的标准缩放/滚动(使用鼠标左键“移动”绘图和鼠标右键“缩放”)在画布中无法访问,基本上是matplotlib 绘图窗口中的“4 点十字”。

我认为这需要创建我自己的处理程序,但我认为必须有一种方法来使用 matplotlib 的默认处理程序?我还查看了这个问题中提到的“滚动”画布选项,但那些似乎只是改变绘图区域的大小而不是放大/缩小数据,我也不想添加任何进一步的按钮来操作情节区域。

我目前拥有的最低限度代码:

0 投票
1 回答
1166 浏览

python - 在 Tkinter Python 中创建全局画布

我正在做一个简单的游戏作为学校作业,但我在更新画布时遇到了问题。我尝试了一些循环和睡眠命令,但它们似乎不起作用。现在我有代码应该刷新画布,但我不知道如何将画布传递给我的 updateCanvas 函数。

基本上我有两个功能:

然后我有一个更新画布的方法

按下按钮应该更新画布,但它说画布不是全局的。这就说得通了。我以前做过java编程。出于某种原因将画布更改为:

这给了我一个“语法错误:无效语法”

我该怎么办?使用循环?我不能在类内创建一个全局变量吗?将游戏视为跳棋或国际象棋,当跳棋或棋子移动时,我需要更新屏幕。

0 投票
1 回答
809 浏览

python - 如何防止 tkinter 画布上的文本重叠

这是一个简单的程序,旨在获取服务器延迟、投影并在小画布上刷新它,但是我无法找到防止文本重叠的方法,并且新的 ping 仍然叠加在旧的 ping 上。