如何在同一Tkinter Toplevel()窗口上显示两个图像

姆登奇

因此,我正在构建一个可以比较两张照片的应用程序。我在屏幕左侧放置了一个列表框,在屏幕右侧放置了两张照片的位置。列表框下面有三个按钮,用于将图片放置在特定标题下(图片1或图片2)。它可以工作,但是我只能在Pic 1和Pic 2上都放一张照片-如果我选择一张照片并将其放在Pic 1下,然后选择另一张照片并将其放在Pic 2下,则第一张照片将消失。

为了更好地了解我的问题,以下是我的应用中的照片浏览功能。

from Tkinter import *
import tkMessageBox
from PIL import ImageTk, Image

def photo_browse ():

    def add_photo (screen, column_num):

        if not "pic" in globals ():
            tkMessageBox.showerror ("Error!", "No picture selected!")
            screen.lift ()
        else:
            screen.image = pic
            can = Label (screen, image = pic)
            can.grid (row = 0, column = column_num)
            Label (screen, text = chosen_photo).grid (row = 1, column = column_num)

    def selection_listbox (evt):

        global chosen_photo
        chosen_photo = str (photo_listbox.get (photo_listbox.curselection ()))
        image_location = "Pics/" + chosen_photo
        global pict
        pict = Image.open (image_location)
        global pic
        pic = ImageTk.PhotoImage (pict)

    import glob

    photo_browse_screen = Toplevel ()
    photo_browse_screen.title ("Photo browse")
    photo_browse_screen.geometry ("1000x600")
    photo_browse_screen.resizable (0, 0)
    photo_listbox = Listbox (photo_browse_screen, width = 50, height = 35)
    photo_listbox.grid (columnspan = 3)
    photo_listbox.bind ('<<ListboxSelect>>', selection_listbox)
    name_list = glob.glob ("Pics/*.jpg")
    name_list = [i [6:] for i in name_list]
    name_list.sort ()
    n = 1
    m = 0
    for i in name_list:
        photo_listbox.insert (n, name_list [m])
        n += 1
        m += 1
    Button (photo_browse_screen, text = "PIC 1", command = lambda: add_photo (photo_browse_screen, 4)).grid (row = 1, column = 0)
    Button (photo_browse_screen, text = "PIC 2", command = lambda: add_photo (photo_browse_screen, 5)).grid (row = 1, column = 1)
    Button (photo_browse_screen, text = "EXIT", command = photo_browse_screen.destroy).grid (row = 1, column = 2)
    can_pic_1 = Label (photo_browse_screen, text = "Pic 1", font= "-weight bold")
    can_pic_1.grid (row = 0, column = 4, padx = (200, 100), sticky = N)
    can_pic_2 = Label (photo_browse_screen, text = "Pic 2", font= "-weight bold")
    can_pic_2.grid (row = 0, column = 5, padx = (100, 150), sticky = N)

root = Tk ()
root.title ("Main menu")
root.geometry ("1000x600")
root.resizable (0, 0)
main_menu = Menu (root)

photos_menu = Menu (main_menu, tearoff = 0)

main_menu.add_cascade (label = "Photos", menu = photos_menu)
photos_menu.add_command (label = "Browse photos", command = photo_browse)

root.config (menu = main_menu)

root.mainloop ()

在上一个功能(添加照片)中,我将照片调整为308x440尺寸,以便它们完美适合此窗口。

在检查完我的代码之后,我几乎肯定global变量会导致此问题,因此,如果有人可以提供替代方法,我将不胜感激。

汤姆·富勒

我正在使用python 3.4,所以我不是100%确定这对您有用(对我来说Tkinter是tkinter)

当我要使用多张图像时,将它们全部添加到列表中,之后您无需对列表进行任何操作

这一直对我有用,而我遇到的问题与您描述的一样,但没有列出

from Tkinter import *
import tkMessageBox
from PIL import ImageTk, Image

global all_images
all_images = []

def photo_browse ():
    def selection_listbox (evt):    
        global chosen_photo
        chosen_photo = str (photo_listbox.get (photo_listbox.curselection ()))
        image_location = "Pics/" + chosen_photo
        global pict
        pict = Image.open (image_location)
        global pic
        pic = ImageTk.PhotoImage (pict)

        # adding all the images to a list has worked for me in the past
        global all_images
        all_images = all_images + [chosen_photo, pic, pict]

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Tkinter的同一窗口中放置图像?

来自分类Dev

如何在同一窗口的Tkinter中正确使用按钮

来自分类Dev

如何在同一窗口中显示两个直方图,但在R中显示不同的图?

来自分类Dev

显示带有两个子图形的窗口图形、一个图像及其直方图

来自分类Dev

如何在Tkinter中使同一列上的两个小部件具有不同的宽度?

来自分类Dev

如何在openGL c ++中的同一窗口中绘制两个对象?

来自分类Dev

如何在同一窗口WPF中添加两个选项卡控件?

来自分类Dev

引导箱,两个模式窗口-一个在另一个窗口上

来自分类Dev

引导箱,两个模式窗口-一个在另一个窗口上

来自分类Dev

如何在Flutter的同一个屏幕上显示两个ListView?

来自分类Dev

如何在Python中的Tkinter中在同一GUI中显示输入和输出

来自分类Dev

如何在两个TextViews的同一行上设置图像?

来自分类Dev

如何在同一行中设置两个图像和文本

来自分类Dev

显示两个窗口而不是一个

来自分类Dev

同一接口上的两个静态 IP

来自分类Dev

如何在同一窗口上创建多个屏幕?

来自分类Dev

如何在同一块中显示两个部分?

来自分类Dev

如何在同一行中显示两个不同的记录?

来自分类Dev

如何在不同的信息窗口上显示不同的图像

来自分类Dev

如何在名称为 I 的顶级窗口上显示图像

来自分类Dev

单击使用Javascript的选择按钮时,在另一个窗口上显示图像

来自分类Dev

如何在tkinter窗口上的图像上绘制线条?

来自分类Dev

如何使两个不同的python脚本在同一端口上运行?

来自分类Dev

如何控制 tkinter Toplevel 窗口的显示?

来自分类Dev

如何在一行Bootstrap 3上显示两个图像

来自分类Dev

Javascript,如何在同一个输入类型的文本字段中显示两个值?

来自分类Dev

如何在同一个选项卡中显示两个请求结果?

来自分类Dev

Tkinter-将每两个文件夹中的所有成对图像并排显示在同一显示器中

来自分类Dev

如何在for循环python-pptx中的同一张幻灯片中添加两个或更多图像

Related 相关文章

  1. 1

    如何在Tkinter的同一窗口中放置图像?

  2. 2

    如何在同一窗口的Tkinter中正确使用按钮

  3. 3

    如何在同一窗口中显示两个直方图,但在R中显示不同的图?

  4. 4

    显示带有两个子图形的窗口图形、一个图像及其直方图

  5. 5

    如何在Tkinter中使同一列上的两个小部件具有不同的宽度?

  6. 6

    如何在openGL c ++中的同一窗口中绘制两个对象?

  7. 7

    如何在同一窗口WPF中添加两个选项卡控件?

  8. 8

    引导箱,两个模式窗口-一个在另一个窗口上

  9. 9

    引导箱,两个模式窗口-一个在另一个窗口上

  10. 10

    如何在Flutter的同一个屏幕上显示两个ListView?

  11. 11

    如何在Python中的Tkinter中在同一GUI中显示输入和输出

  12. 12

    如何在两个TextViews的同一行上设置图像?

  13. 13

    如何在同一行中设置两个图像和文本

  14. 14

    显示两个窗口而不是一个

  15. 15

    同一接口上的两个静态 IP

  16. 16

    如何在同一窗口上创建多个屏幕?

  17. 17

    如何在同一块中显示两个部分?

  18. 18

    如何在同一行中显示两个不同的记录?

  19. 19

    如何在不同的信息窗口上显示不同的图像

  20. 20

    如何在名称为 I 的顶级窗口上显示图像

  21. 21

    单击使用Javascript的选择按钮时,在另一个窗口上显示图像

  22. 22

    如何在tkinter窗口上的图像上绘制线条?

  23. 23

    如何使两个不同的python脚本在同一端口上运行?

  24. 24

    如何控制 tkinter Toplevel 窗口的显示?

  25. 25

    如何在一行Bootstrap 3上显示两个图像

  26. 26

    Javascript,如何在同一个输入类型的文本字段中显示两个值?

  27. 27

    如何在同一个选项卡中显示两个请求结果?

  28. 28

    Tkinter-将每两个文件夹中的所有成对图像并排显示在同一显示器中

  29. 29

    如何在for循环python-pptx中的同一张幻灯片中添加两个或更多图像

热门标签

归档