python tkinter界面随分辨率自动调整尺寸,Tkinter画布自动调整大小

本文探讨了Tkinter中Canvas界面在启动时自动填充屏幕的问题。作者创建了一个ResizingCanvas类,尝试解决窗口和画布元素在分辨率改变时按比例调整大小的问题,但遇到窗口初始打开时异常扩展的问题。问题可能与平台相关,寻求解决方案。
摘要由CSDN通过智能技术生成

所以在回答这个问题的过程中,我遇到了来自Tkinter的一些奇怪的行为。我有一个类,它可以调整一个Canvas实例的大小,以及在该实例上绘制的任何小部件的大小。但是,当我运行代码时,不管窗口的初始尺寸是多少,窗口都会不断地扩展,直到填满整个屏幕。发生这种情况后,窗口的行为与预期完全一样,可以正确调整对象的大小。窗口仅在启动时展开以填充屏幕。

通过阅读Tkinter文档,我可以相信这可能是特定于平台的(但我没有任何证据)。

我的问题是:为什么会这样?我怎样才能阻止它?

代码如下:from Tkinter import *

# a subclass of Canvas for dealing with resizing of windows

class ResizingCanvas(Canvas):

def __init__(self,parent,**kwargs):

Canvas.__init__(self,parent,**kwargs)

self.bind("", self.on_resize)

self.height = self.winfo_reqheight()

self.width = self.winfo_reqwidth()

def on_resize(self,event):

# determine the ratio of old width/height to new width/height

wscale = float(event.width)/self.width

hscale = float(event.height)/self.height

self.width

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 你可以通过绑定画布的移动事件来实现输入框位置随画布位置改变。具体步骤如下: 1. 给画布绑定移动事件,当画布移动时触发该事件。 ``` canvas.bind('<B1-Motion>', move_canvas) ``` 2. 定义移动事件处理函数,获取画布的当前位置,然后将输入框的位置设置为画布的位置加上一个偏移量。 ``` def move_canvas(event): # 获取画布当前位置 x, y = canvas.coords(canvas_image) # 设置输入框位置 input_box.place(x=x+10, y=y+10) ``` 其中,10为偏移量,你可以根据需求调整。 完整代码示例: ``` import tkinter as tk # 创建窗口和画布 root = tk.Tk() canvas = tk.Canvas(root) canvas.pack() # 加载图片 image = tk.PhotoImage(file='image.png') canvas_image = canvas.create_image(0, 0, image=image, anchor='nw') # 创建输入框 input_box = tk.Entry(canvas) input_box.place(x=10, y=10) # 绑定画布移动事件 canvas.bind('<B1-Motion>', move_canvas) # 移动事件处理函数 def move_canvas(event): # 获取画布当前位置 x, y = canvas.coords(canvas_image) # 设置输入框位置 input_box.place(x=x+10, y=y+10) root.mainloop() ``` ### 回答2: Python中的tkinter是用于创建GUI应用程序的库,可用于创建图形用户界面。如果要让一个输入框随着画布位置的改变而改变,可以采取以下步骤: 1. 导入必要的模块: ```python from tkinter import * ``` 2. 创建一个窗口和画布: ```python root = Tk() canvas = Canvas(root, width=300, height=300) canvas.pack() ``` 3. 创建一个输入框: ```python entry = Entry(root) entry.pack() ``` 4. 定义一个函数,该函数会在画布移动时被调用,更新输入框的位置: ```python def update_entry_position(event): x = canvas.winfo_x() y = canvas.winfo_y() entry.place(x=x+10, y=y+10) ``` 5. 将该函数与画布的移动事件绑定: ```python canvas.bind("<B1-Motion>", update_entry_position) ``` 完整的代码示例如下: ```python from tkinter import * def update_entry_position(event): x = canvas.winfo_x() y = canvas.winfo_y() entry.place(x=x+10, y=y+10) root = Tk() canvas = Canvas(root, width=300, height=300) canvas.pack() entry = Entry(root) entry.pack() canvas.bind("<B1-Motion>", update_entry_position) root.mainloop() ``` 这样,当你用鼠标左键点击并拖动画布时,输入框会跟随画布的位置改变。在函数`update_entry_position`中,通过`winfo_x()`和`winfo_y()`方法获取画布的当前位置,然后将输入框重新放置到画布位置的偏移量上。 ### 回答3: 使用PythonTkinter库可以实现输入框(Entry)随画布(Canvas)位置的改变。 首先,我们需要创建一个窗口,然后在窗口中添加一个画布和一个输入框。可以使用Tkinter库中的Canvas和Entry类来创建它们。 接下来,我们可以使用画布的绑定事件(bind)方法来监测鼠标的移动事件。当鼠标在画布上移动时,可以通过获取鼠标的坐标来动态改变输入框的位置。 具体的实现步骤如下: 1. 导入Tkinter库:`import tkinter as tk` 2. 创建窗口:`window = tk.Tk()` 3. 创建画布和输入框:`canvas = tk.Canvas(window, width=300, height=300) entry = tk.Entry(window)` 4. 显示画布和输入框:`canvas.pack() entry.pack()` 5. 定义鼠标移动事件处理函数:`def move(event): x = event.x y = event.y entry.place(x=x, y=y)` 6. 绑定鼠标移动事件到画布上:`canvas.bind('<Motion>', move)` 7. 运行窗口主循环:`window.mainloop()` 当运行程序后,可以在窗口中看到一个画布和一个输入框。鼠标在画布上移动时,输入框会随着鼠标移动而改变位置。 以上就是使用PythonTkinter库实现输入框随画布位置改变的方法。代码简单易懂,适合初学者学习和使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值