首页 > 编程问答 >tkinter 问题(pyimage10)

tkinter 问题(pyimage10)

时间:2024-07-26 11:51:29浏览次数:7  
标签:python dictionary tkinter garbage-collection

这个回调错误。我尝试使用函数从单独的脚本调用菜单。看起来垃圾收集器正在弄乱菜单图像。

我尝试将我的图像移动到字典中并调用按钮/矩形中的页面。


你说的没错,Tkinter 和 Python 的垃圾回收机制有时会导致图像无法显示的问题。这通常发生在你创建了一个 PhotoImage 对象,然后让它超出作用域时。当对象超出作用域时,Python 的垃圾回收机制可能会将其删除,导致 Tkinter 无法再找到图像。

以下是一些解决这个问题的方法:

1. 使用 self 或全局变量保存图像引用:

  • 最简单的方法是将图像存储为类的属性或全局变量。这样可以确保图像在使用期间一直存在于内存中。

```python import tkinter as tk

class MyWindow: def init (self, master): self.master = master master.title("My App")

       # 创建图像并将其存储为实例变量
       self.my_image = tk.PhotoImage(file="my_image.png")

       # 在按钮上使用图像
       self.button = tk.Button(master, image=self.my_image, command=self.do_something)
       self.button.pack()

   def do_something(self):
       print("按钮被点击了!")

root = tk.Tk() my_window = MyWindow(root) root.mainloop() ```

2. 使用 image.keep_reference() 方法:

  • PhotoImage 对象有一个 keep_reference() 方法,可以用来存储对图像的额外引用。这可以防止垃圾回收机制过早地删除图像。

```python import tkinter as tk

def create_button(master): # 创建图像 my_image = tk.PhotoImage(file="my_image.png")

   # 使用 keep_reference() 保存对图像的引用
   my_image.keep_reference(master)

   # 在按钮上使用图像
   button = tk.Button(master, image=my_image, command=do_something)
   button.pack()

def do_something(): print("按钮被点击了!")

root = tk.Tk() create_button(root) root.mainloop() ```

3. 将图像存储在字典中:

  • 你可以将图像存储在字典中,并使用键来访问它们。这可以帮助你组织图像,并确保它们在需要时可用。

```python import tkinter as tk

class MyWindow: def init (self, master): self.master = master master.title("My App")

       # 创建图像字典
       self.images = {
           "image1": tk.PhotoImage(file="image1.png"),
           "image2": tk.PhotoImage(file="image2.png"),
       }

       # 在按钮上使用图像
       self.button1 = tk.Button(master, image=self.images["image1"], command=self.do_something)
       self.button1.pack()

   def do_something(self):
       print("按钮被点击了!")

root = tk.Tk() my_window = MyWindow(root) root.mainloop() ```

请根据你的代码结构选择最适合你的方法。 记住,只要确保 PhotoImage 对象在使用期间不会被垃圾回收即可。

标签:python,dictionary,tkinter,garbage-collection
From: 78796147

相关文章

  • (三)Python基本数据类型
    Python的基本数据类型包括整数类型、浮点数类型和复数类型。下面分别介绍这些数据类型以及数值运算操作符和数值运算函数。整数类型(int):整数类型表示没有小数部分的数字,可以是正数、负数或零。例如:a=5b=-3c=02.浮点数类型(float):浮点数类型表示有小数部分的数字,可以......
  • 【Python自动化办公】用Pandas库自动化操作Excel表格,从读取、写入到数据处理和分析
    文末免费赠送精品编程资料~~前言Python的第三方Pandas库是数据处理和分析中的利器,其强大的功能可以帮助我们轻松地对Excel表格进行自动化操作。接下来,我们将介绍九个用Pandas库操作Excel的编程例子,并且每个例子都会涉及不同的知识点,确保全面掌握这个主题。1.读取和写入E......
  • 总结24个Python接单赚钱平台与详细教程,兼职月入5000+
    如果说当下什么编程语言最靠谱或者比较适合搞副业?答案肯定100%是:Python。python是所有语法中最简单易上手的语言,不需要特别的的英语词汇量,逻辑思维也不需要很差就能上手。而且学会了之后就能编写代码爬取各种数据,制作各种图表,提升工作效率。而且还能利用业余时间接点私活......
  • python安装第三方库的国内镜像
    直接:pipconfigsetglobal.index-urlhttps://pypi.doubanio.com/simple设置了全局的第三方库的下载文件镜像请求网址。安装第三方库:pipinstallscrapy--scrapy第三方库名称 pip从国内镜像安装的命令使用中国大陆地区的Python包镜像服务时,可以通过修改p......
  • 如何将Python嵌入.Net?
    我尝试基于文档此处和此处使用pythonnet将Python嵌入到.Net中。这是我的代码Runtime.PythonDLL=@"D:\Dev\Console\.conda\python311.dll";PythonEngine.Initialize();dynamicsys=Py.Import("sys");Console.WriteLine("Pythonversion:&quo......
  • 使用pybind11封装c++的dll,供python调用
    用pip安装好pybind11 文件清单,都写在一个目录里//文件名:add.cppextern"C"doubleadd(doublein1,doublein2){returnin1+in2;}//文件名:sub.cppextern"C"doublesub(doublein1,doublein2){returnin1-in2;}//文件名:mul.cppextern"......
  • python-myStudyList
     1  下载软件1.1下载python最新版本并安装下载地址:百度搜索python官网。WelcometoPython.org。 1.2官网学习网页:PythonTutorials–RealPython   1.3也可以下载集成环境软件Anaconda。 Anaconda软件商城官方正版免费下载(msc23.cn) 2 ......
  • Python语法基础
    基本语句输入input() eg:输出print(内容)注释单行注释:#注释内容多行注释:"""注释内容"""数据类型: 字面量:整型、浮点数、字符串......intfloatstring查看数据类型:type(数据)查看数据类型 转换函数int(x):将x转换成整数类型float(x):将x转......
  • PyTesseract 不提取文本?我是所有这些Python的新手,请需要h3lp
    它不想从图像中提取文本,就像终端保持黑色并带有空格,就像它实际上试图提取文本一样,这是我的代码和图像从PIL导入图像导入pytesseract导入CV2“C:\用户\埃米利亚诺\下载\practic.png”pytesseract.pytesseract.tesseract_cmd="C:\ProgramFiles\Tesseract-OCR\tesseract.exe......
  • Python安装第三方库
    Python安装PILPIL(PythonImagingLibrary)是一个旧的Python库,用于处理图像。然而,PIL已经不再维护,并被一个名为Pillow的库所取代。Pillow是PIL的一个分支,并且完全兼容PIL。建议使用Pillow而不是PIL。pipinstallpillowPython安装moviepymoviepy是一个用于视频编辑的Python库,......