Python tkinter中 图形 无法显示
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python tkinter中 图形 无法显示,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1390字,纯文字阅读大概需要2分钟。
内容图文
![Python tkinter中 图形 无法显示](/upload/InfoBanner/zyjiaocheng/845/0aee09b1356b4ce890a4818b532aa069.jpg)
问题:
- 利用tkinter基于Frame创建类,在其中使用了 图形 对象。调用该类并执行主循环,窗口中无法显示使用的图像,代码如下:
from tkinter import *
class Demo(Frame):
def __init__(self, parent=None):
Frame.__init__(self, parent)
self.pack(expand=YES, fill=BOTH)
pic = PhotoImage(file='pic.gif')
width, height=pic.width(), pic.height()
canv = Canvas(self, width=width, height=height, relief=RIDGE, bd=2)
canv.pack(side=TOP, expand=YES, fill=BOTH)
canv.create_image(0, 0, image=pic, anchor=NW)
if __name__ == '__main__':
root = Tk()
Demo(root).mainloop()
原因:
- 和其他tkinter组件不同的是,Python中图形对象被垃圾回收了,图形就会完全丢失,必须保存显式的图形对象引用
- 图像对象
pic
为Demo
类中的局部对象,Demo
实例化后pic
对象即被垃圾回收,再调用其mainloop()
方法时,pic
对象已不存在
解决方案:
- 将
pic
设置为类属性self.pic
class Demo(Frame):
def __init__(self, parent=None):
...
self.pic = pic
canv.create_image(0, 0, image=self.pic, anchor=NW)
if __name__ == '__main__':
root = Tk()
Demo(root).mainloop()
- 在主循环中创建全局图形对象
class Demo(Frame):
def __init__(self, parent=None, pic=None):
Frame.__init__(self, parent)
self.pack(expand=YES, fill=BOTH)
width, height=pic.width(), pic.height()
canv = Canvas(self, width=width, height=height, relief=RIDGE, bd=2)
canv.pack(side=TOP, expand=YES, fill=BOTH)
canv.create_image(0, 0, image=pic, anchor=NW)
if __name__ == '__main__':
root = Tk()
pic = PhotoImage(file='pic.gif')
Demo(root, pic).mainloop()
内容总结
以上是互联网集市为您收集整理的Python tkinter中 图形 无法显示全部内容,希望文章能够帮你解决Python tkinter中 图形 无法显示所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。