Mike_python小 发表于 2023-7-23 09:34:47

tkinter问题

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



我使用这个代码                image = Image.open('Version 3.0\\log\\image\\{}.png'.format(lines.split(" ", 3)))
                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 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替换为你实际的图片路径。你可以根据需要重复加载和显示其他的图片。

希望这个解答能够满足你的需求。如果还有其他问题,请随时提问。
如果问题已经解决,请设置最佳答案

Mike_python小 发表于 2023-7-23 09:36:25

忘记说了,我这个是一个循环,获取到一个图片就插入一个,所以只有这一个语句循环插入

isdkz 发表于 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组件的属性,保持了对这些对象的引用,防止它们被垃圾收集器删除。

Mike_python小 发表于 2023-7-23 09:43:26

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

可是我如何用一个循环语句来保持呢

歌者文明清理员 发表于 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`的值,或者在插入图片之间添加额外的文本或者换行符。

为什么不给我设置一个最佳答案呢?点它 -> https://i.imgtg.com/2023/06/18/OTpTnF.png

陶远航 发表于 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.png、path_to_image2.png和path_to_image3.png替换为实际的图片路径。通过循环遍历图片路径列表,将每张图片加载并插入到Text组件中。

这样,你就可以显示多张图片了。希望这个解答对你有帮助。如果还有其他问题,请随时提问。
如果问题已经解决,请设置最佳答案

Mike_python小 发表于 2023-7-23 10:43:08

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

不符合,我这个没有列表,是实时的

歌者文明清理员 发表于 2023-7-23 12:00:33

占楼

Mike_python小 发表于 2023-7-23 12:01:26

本帖最后由 Mike_python小 于 2023-7-23 12:02 编辑

歌者文明清理员 发表于 2023-7-23 12:00
占楼

“支持”歌者文明清理员的高质量人工,只占楼不回答问题

歌者文明清理员 发表于 2023-7-23 13:00:13

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

6#,这个是脚本bug,它回复了两次

hellomyprogram 发表于 2023-7-23 14:58:08

你可以将chat_text.image设置成列表,并将你的第5行代码
chat_text.image = pphoto
转换成这样:
chat_text.image.append(pphoto)
希望对你有帮助。

Mike_python小 发表于 2023-7-23 14:59:00

hellomyprogram 发表于 2023-7-23 14:58
你可以将chat_text.image设置成列表,并将你的第5行代码

转换成这样:


已经解决了,最佳答案给你吧!
页: [1]
查看完整版本: tkinter问题