因此,在回答question的过程中,我遇到了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 = event.width

self.height = event.height

# resize the canvas

self.config(width=self.width, height=self.height)

# rescale all the objects tagged with the "all" tag

self.scale("all",0,0,wscale,hscale)

def main():

root = Tk()

myframe = Frame(root)

myframe.pack(fill=BOTH, expand=YES)

mycanvas = ResizingCanvas(myframe,width=850, height=400, bg="red")

mycanvas.pack(fill=BOTH, expand=YES)

# add some widgets to the canvas

mycanvas.create_line(0, 0, 200, 100)

mycanvas.create_line(0, 100, 200, 0, fill="red", dash=(4, 4))

mycanvas.create_rectangle(50, 25, 150, 75, fill="blue")

# tag all of the drawn widgets

mycanvas.addtag_all("all")

root.mainloop()

if __name__ == "__main__":

main()

解决方法:

我们已经确定,canvas的一个选项,highlightthickness是此行为的罪魁祸首,将其设置为0可解决此问题.

这是(我认为)它发生的原因:

配置

小部件已更改大小(或在某些平台上为位置).在传递给回调的事件对象的width和height属性中提供了新的大小.

这是Canvas子类的精简版本:

class ResizingCanvas(Canvas):

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

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

print self.winfo_reqwidth(),self.winfo_reqheight() #>>>854, 404

self.bind("", self.on_resize)

def on_resize(self,event):

self.width = event.width #>>>854

self.height = event.height #>>>404

self.config(width=self.width, height=self.height)

因此,< Configure>应该这样操作:

>检测调整大小

>通话功能

>将画布设置为新大小

但是它是这样做的:

>检测调整大小

>通话功能

>将画布设置为新大小

>检测调整大小,重复

3&之间发生了什么? 4?好的,将Canvas设置为新的尺寸(之前的尺寸为4),但是之后,高亮厚度会将实际尺寸更改为该尺寸的4,从而触发< Configure>不断循环直到屏幕宽度被击中并破裂.

到那时,可能会发生正常的调整大小,因为它只有一个尺寸可以使用(高光和画布尺寸的总和),并且可以正常工作.如果添加了一个按钮来调整画布的大小,并在画布停止扩展后按下它,它将重新调整大小,然后再次变得怪异并开始扩展.

我希望这种解释.我不确定100%正确无误,因此,如果有人进行了更正,请放心.

标签:tkinter,callback,python,user-interface

python设置画布大小_python-Tkinter画布自动调整大小相关推荐

  1. Python设置画布大小_Python Tkinter Canvas画布

    简介 画布部件则用于将结构化图形的 Python 应用.它是用于绘制图表和曲线图的 Python 应用. 画布部件则用于将结构化图形的 Python 应用.它是用于绘制图表和曲线图的 Python 应 ...

  2. python设置窗口焦点_Python Tkinter PanedWindow窗口布局管理

    PanedWindow小部件的作用类似于Container小部件,其中包含一个或多个水平或垂直排列的子窗口小部件(窗格).通过使用鼠标移动称为框格的分隔线,用户可以调整子窗格的大小. 每个窗格仅包含一 ...

  3. python设置堆大小_Python中的堆问题

    Heap in python 堆(英语:Heap)是计算机科学中一类特殊的数据结构的统称.堆通常是一个可以被看做一棵树的数组对象.在队列中,调度程序反复提取队列中第一个作业并运行,因为实际情况中某些时 ...

  4. python设置画布的大小_Python tkinter框架画布调整大小

    我正在尝试调整画布大小,以便当用户在窗口边缘使用"单击并拖动"调整窗口大小时,画布会填满整个窗口,但我没有成功 . 我看过以下其他问题: 问题#1(之前发布,但没有帮助) 这个发送 ...

  5. Python设置画布大小_Python第25课:海龟绘图_自定义函数的应用

    本节知识点 1. 设置画布大小 2. 两个案例对比分析 3. 复习自定义函数 案例:餐布桌布设计 课堂笔记 作业布置 1.完成视频中两款餐布桌布的图案设计. 2.自己设计一款餐布桌布(可参考网上的图案 ...

  6. python怎么设置画布大小_python画图时设置分辨率和画布大小的实现(plt.figure())

    本文介绍了python画图时设置分辨率和画布大小的实现,主要使用plt.figure(),下面就一起来了解一下 plt.figure() 示例: import numpy as np import p ...

  7. Python设置画布大小_Python绘图库Turtle详细分析

    Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x.纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系中移动,从而在它爬行 ...

  8. python编程画布_Python Tkinter 画布(Canvas)

    Python Tkinter 画布(Canvas) Python Tkinter 画布(Canvas)组件和 html5 中的画布一样,都是用来绘图的.您可以将图形,文本,小部件或框架放置在画布上. ...

  9. python输出文本框_python TKinter获取文本框内容的方法

    python TKinter获取文本框内容的方法 如下所示: #coding:utf-8 import urllib,urllib2 import Tkinter #导入TKinter模块 ytm=T ...

  10. python设置excel自动换行_Python处理Excel实战3—单元格相关设置等

    用Python处理Excel的实质即是用编程来替代手动操作,对于处理日常经常需要处理规律性的数据,可以较大地解放生产力.本文主要涉及处理以下内容: 1.取消单元格合并 2.合并单元格 3.写入公式 4 ...

最新文章

  1. 2009-徘徊-开场白
  2. Hadoop会遇到的45个问题,你确定你了解吗?
  3. 完全企业虚拟化方案-Total Enterprise Virtualization
  4. jBPM4.4 no jBPM DB schema:
  5. java 关于日期的一些常用惯例
  6. 受迫阻尼 matlab 仿真,MATLAB系统仿真报告——有阻尼受迫振动系统
  7. (进阶)LeetCode(206)——反转链表(JavaScript)
  8. Azkaban的编译与安装
  9. android pdfjet_GitHub - lnj721/PdfBuilder: Android端使用图片生成PDF文件
  10. 云erp系统、进销存软件、仓储管理系统之间有哪些区别
  11. python文件操作方法seek_Python文件操作及seek偏移详解
  12. 关键词策略 —关键词选择
  13. HashMap为什么是2倍扩容
  14. cartographer_pose_extrapolator
  15. 自动学习——《Learning to Teach》——ICLR2018
  16. 如何更改使用 Matplotlib 绘制的图形的大小?
  17. 2021-10-27 - 开发人员将大多数时间花到了探究系统本身上
  18. 2023蓝桥杯前端web组css复习
  19. 4810: [Ynoi2017]由乃的玉米田
  20. Python试题和规范文档

热门文章

  1. python 共享内存 c_python共享内存 - DK's Blog - 博客园
  2. 原来棒棒糖还有这功能~
  3. MATLAB注意事项
  4. [总结]视音频编解码技术零基础学习方法
  5. 【python】什么是序列,Python序列详解
  6. อยากจะร่ำรวยเล่น แทงบอลออนไลน์
  7. 新版PF使用说明文档
  8. lightning接口_带你回看手机接口发展史:TypeC将实现大一统?
  9. docker部署finebi 帆软
  10. 功率开关的RC-Snubber电路设计