鱼C论坛

 找回密码
 立即注册
查看: 1960|回复: 12

[已解决]tkinter问题

[复制链接]
发表于 2023-7-23 09:34:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
python的tkinter中的text组件如何添加多个图片并显示所有图片

9f032642247a373c43564c346af1590.png

我使用这个代码
                image = Image.open('Version 3.0\\log\\image\\{}.png'.format(lines[user_len].split(" ", 3)[2]))
                pphoto = ImageTk.PhotoImage(image)
                chat_text.image_create(END, image=pphoto)#用这个方法创建一个图片对象,并插入到“END”的位置
                chat_text.insert(END, "\n")
                chat_text.image = pphoto

                chat_text.config(state=DISABLED)
                chat_text.see("end")

插入的图片,效果就是图片
最佳答案
2023-7-23 14:58:08
你可以将chat_text.image设置成列表,并将你的第5行代码
chat_text.image = pphoto

转换成这样:
chat_text.image.append(pphoto)
希望对你有帮助。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-7-23 09:34:59 | 显示全部楼层
在Python的Tkinter库中,要在Text组件中显示多个图片,可以通过以下步骤实现:

1. 导入必要的模块:
   from tkinter import *
   from PIL import ImageTk, Image
   

2. 创建Tkinter窗口和Text组件:
   root = Tk()
   text = Text(root)
   text.pack()
   

3. 加载图片并将其显示在Text组件中:
   image_path = 'path_to_your_image.png'
   image = Image.open(image_path)
   photo = ImageTk.PhotoImage(image)
   text.image_create(END, image=photo)
   text.insert(END, "\n")
   

   以上代码会将图片插入到Text组件的末尾位置(END)。

4. 重复步骤3,加载并显示其他的图片。

完整的示例代码如下所示:
from tkinter import *
from PIL import ImageTk, Image

root = Tk()
text = Text(root)
text.pack()

# 第一张图片
image_path1 = 'path_to_your_first_image.png'
image1 = Image.open(image_path1)
photo1 = ImageTk.PhotoImage(image1)
text.image_create(END, image=photo1)
text.insert(END, "\n")

# 第二张图片
image_path2 = 'path_to_your_second_image.png'
image2 = Image.open(image_path2)
photo2 = ImageTk.PhotoImage(image2)
text.image_create(END, image=photo2)
text.insert(END, "\n")

# 更多的图片...

root.mainloop()

你需要将path_to_your_image.png替换为你实际的图片路径。你可以根据需要重复加载和显示其他的图片。

希望这个解答能够满足你的需求。如果还有其他问题,请随时提问。
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 0 反对 2

使用道具 举报

 楼主| 发表于 2023-7-23 09:36:25 | 显示全部楼层
忘记说了,我这个是一个循环,获取到一个图片就插入一个,所以只有这一个语句循环插入
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-23 09:40:56 | 显示全部楼层
在Python的tkinter库中,可以使用Text组件的image_create方法来插入图片。但是,如果你想插入多个图片,你需要为每个图片创建一个独立的PhotoImage对象,并且你需要保持对这些PhotoImage对象的引用,否则它们可能会被Python的垃圾收集器删除,导致图片无法显示。

以下是一段示例代码,说明如何在Text组件中插入多个图片:
from tkinter import *
from PIL import Image, ImageTk

# 创建Tk窗口
root = Tk()

# 创建Text组件
text = Text(root)
text.pack()

# 创建并插入第一个图片
image1 = Image.open('image1.png')
photo1 = ImageTk.PhotoImage(image1)
text.image_create(END, image=photo1)
# 保持对PhotoImage对象的引用
text.image1 = photo1

# 创建并插入第二个图片
image2 = Image.open('image2.png')
photo2 = ImageTk.PhotoImage(image2)
text.image_create(END, image=photo2)
# 保持对PhotoImage对象的引用
text.image2 = photo2

# 启动Tk窗口的主循环
root.mainloop()

在这段代码中,我们首先创建了一个Tk窗口和一个Text组件。然后,我们打开了两个图片文件,创建了两个PhotoImage对象,并使用Text组件的image_create方法将这两个图片插入到Text组件中。最后,我们通过将PhotoImage对象保存为Text组件的属性,保持了对这些对象的引用,防止它们被垃圾收集器删除。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-23 09:43:26 | 显示全部楼层
isdkz 发表于 2023-7-23 09:40
在Python的tkinter库中,可以使用Text组件的image_create方法来插入图片。但是,如果你想插入多个图片,你 ...

可是我如何用一个循环语句来保持呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-23 10:35:34 | 显示全部楼层
本帖最后由 歌者文明清理员 于 2023-7-23 12:00 编辑

你的代码看起来是正确的,能够在tkinter的Text组件中插入图片。然而,如果你想要在Text组件中插入多张图片,你需要为每一张图片创建一个新的ImageTk.PhotoImage对象,然后使用text组件的image_create方法插入图片。

以下是一个简单的示例,演示了如何在tkinter Text组件中插入多张图片:

```python
from tkinter import Tk, Text, END
from PIL import Image, ImageTk

def insert_image(filename, text_widget):
    image = Image.open(filename)
    photo = ImageTk.PhotoImage(image)
    text_widget.image_create(END, image=photo)
    text_widget.image = photo  # Keep a reference to prevent garbage collection

root = Tk()
text = Text(root)
text.pack()

# 循环插入多张图片
for image_file in ['image1.png', 'image2.png', 'image3.png']:
    insert_image(image_file, text)

root.mainloop()
```
在上述代码中,我们定义了一个函数`insert_image`,它打开一个图片文件,创建一个ImageTk.PhotoImage对象,然后在Text组件的末尾插入图片。然后,我们在一个循环中调用这个函数,为Text组件插入多张图片。

注意:由于Python的垃圾收集机制,如果你不保存一个对ImageTk.PhotoImage对象的引用,图片可能会在你尝试显示它们的时候被删除。为了防止这种情况,我们将PhotoImage对象保存在text组件的一个属性中。

以上的代码只是一个基础示例,你可能需要根据自己的需求进行调整。例如,你可能需要根据实际的图片文件路径来调整`image_file`的值,或者在插入图片之间添加额外的文本或者换行符。


为什么不给我设置一个最佳答案呢?点它 ->

                               
登录/注册后可看大图
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-23 10:40:05 | 显示全部楼层
根据你提供的代码,可以看出你已经在Tkinter的Text组件中成功地插入了一张图片。如果你想要显示多张图片,你可以使用一个循环,多次重复这个过程。以下是修改后的代码示例:
from tkinter import *
from PIL import ImageTk, Image

root = Tk()
text = Text(root)
text.pack()

# 循环插入多张图片
image_paths = ['path_to_image1.png', 'path_to_image2.png', 'path_to_image3.png']
for path in image_paths:
    image = Image.open(path)
    photo = ImageTk.PhotoImage(image)
    text.image_create(END, image=photo)
    text.insert(END, "\n")

root.mainloop()

在上述代码中,你需要将path_to_image1.pngpath_to_image2.pngpath_to_image3.png替换为实际的图片路径。通过循环遍历图片路径列表,将每张图片加载并插入到Text组件中。

这样,你就可以显示多张图片了。希望这个解答对你有帮助。如果还有其他问题,请随时提问。
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-23 10:43:08 | 显示全部楼层
陶远航 发表于 2023-7-23 10:40
根据你提供的代码,可以看出你已经在Tkinter的Text组件中成功地插入了一张图片。如果你想要显示多张图片, ...


不符合,我这个没有列表,是实时的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-23 12:00:33 | 显示全部楼层
占楼
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-7-23 12:01:26 | 显示全部楼层
本帖最后由 Mike_python小 于 2023-7-23 12:02 编辑


“支持”歌者文明清理员的高质量人工,只占楼不回答问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-23 13:00:13 | 显示全部楼层
Mike_python小 发表于 2023-7-23 12:01
“支持”歌者文明清理员的高质量人工,只占楼不回答问题

6#,这个是脚本bug,它回复了两次
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-23 14:58:08 | 显示全部楼层    本楼为最佳答案   
你可以将chat_text.image设置成列表,并将你的第5行代码
chat_text.image = pphoto

转换成这样:
chat_text.image.append(pphoto)
希望对你有帮助。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-23 14:59:00 | 显示全部楼层
hellomyprogram 发表于 2023-7-23 14:58
你可以将chat_text.image设置成列表,并将你的第5行代码

转换成这样:

已经解决了,最佳答案给你吧!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-22 10:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表