如何使用 tkinter 在 Python 中的新选项卡中显示图像

问题描述 投票:0回答:2

所以我一直在尝试在第一个选项卡的新选项卡中显示图像查看器应用程序。希望在单击按钮后会出现一个带有图片的新选项卡。可以使用 Tkinter 来做吗?如果是这样,这是代码的一部分,我希望得到任何建议:

root = tk.Tk()
root.title('chat bot for discord')
def newV():
    set = tk.Tk()
    image1 = ImageTk.PhotoImage(Image.open("-----------------------.jpg"))
    image2 = ImageTk.PhotoImage(Image.open("-----------------------.jpg"))
    image3 = ImageTk.PhotoImage(Image.open("-----------------------.jpg"))
    image4 = ImageTk.PhotoImage(Image.open("-----------------------.jpg"))
    image5 = ImageTk.PhotoImage(Image.open("-----------------------.jpg"))
    image6 = ImageTk.PhotoImage(Image.open("-----------------------.jpg"))
    image7 = ImageTk.PhotoImage(Image.open("-----------------------.jpg"))
    image8 = ImageTk.PhotoImage(Image.open("-----------------------.jpg"))
    image9 = ImageTk.PhotoImage(Image.open("-----------------------.jpg"))
    image10 = ImageTk.PhotoImage(Image.open("-----------------------.jpg"))
    image_list = [image1, image2, image3, image4, image5, image6, image7, image8, image9, image10]
    image_label = ttk.Label(image=image1)
    image_label.grid(column=1, row=1, columnspan=3)
    def next(slides_num):
        image_label = ttk.Label(image=image_list[slides_num - 1])
        nextButton = ttk.Button(set, text=">>", command=lambda: next(slides_num + 1))
        if slides_num == 10:
            nextButton = ttk.Button(set, text="done", state=DISABLED)
        image_label.grid(column=1, row=1, columnspan=3)
        functionButton.grid(column=1, row=5)
        nextButton.grid(column=2, row=5)

    functionButton = ttk.Button(set, text="press here")
    nextButton = ttk.Button(set, text=">>", command=lambda: next(2))
    functionButton.grid(column=1, row=5)
    nextButton.grid(column=2, row=5)
    set.mainloop()

newVariablesButton = ttk.Button(root, text="set computer cordinates", command=newV)
newVariablesButton.grid(column=2, row=5)
root.mainloop()
python image tkinter tabs display
2个回答
0
投票

希望在单击按钮后会出现一个带有图片的新选项卡。

您正在使用

Tk()
的多个实例以及
Label
小部件的相同副本。

一个

Tk()
mainloop()
将完成整个脚本。如果你想打开一个新窗口,那么你可以使用
Toplevel()
。根据 Bryan Oakley 评论的要求。

不要使用

set
,并且
next
,它对 Python 有效。使用一些类似下划线的东西。 “如果你想打开一个新窗口,那么你可以使用 Toplevel()”。

  • top = tk.Toplevel()
    而不是
    set = tk.Tk()

正如您所说,“我希望在单击按钮后会出现一个带有图片的新选项卡”。

您在

newV()
功能中缺少根窗口。

  • 第 26 行,
    image_label = ttk.Label(top,...)
    代替
    image_label = ttk.Label(...)
    。您不需要关键字
    image=
  • 在第 19 行,注释掉并替换
    .configure
    。应该
    image_label.config(image=image_list[slides_num - 1])
  • 在第 20、23、24 和 25 行,移至
    newV()
    函数。
  • 在第 22 行,将
    tk.
    前缀添加到
    state=tk.DISABLED
  • 第 31 行,注释掉
    #set.mainloop()

片段修改了您的脚本:

import tkinter as tk
from tkinter import ttk
from PIL import Image,ImageTk

root=tk.Tk()

root.title('chat bot for discord')
def newV():
    top = tk.Toplevel()
    image1 = ImageTk.PhotoImage(Image.open("p1.png"))
    image2 = ImageTk.PhotoImage(Image.open("p2.png"))
    image3 = ImageTk.PhotoImage(Image.open("p3.png"))
    image4 = ImageTk.PhotoImage(Image.open("p4.png"))
    image5 = ImageTk.PhotoImage(Image.open("p5.png"))
    image6 = ImageTk.PhotoImage(Image.open("p6.png"))
    image7 = ImageTk.PhotoImage(Image.open("p7.png"))
    image8 = ImageTk.PhotoImage(Image.open("p8.png"))
    image9 = ImageTk.PhotoImage(Image.open("p9.png"))
    image10 = ImageTk.PhotoImage(Image.open("p10.png"))
    
    image_list = [image1, image2, image3,
                  image4, image5, image6,
                  image7, image8, image9,
                  image10]
    
    image_label = ttk.Label(top, image=image1)
    
    functionButton = ttk.Button(top, text="press here")
    
    nextButton = ttk.Button(top, text=">>", command=lambda: _next(2))
    
    functionButton.grid(column=1, row=5)
    nextButton.grid(column=2, row=5)
    image_label.grid(column=1, row=1, columnspan=3)

    
    def _next(slides_num):
        image_label.config(image=image_list[slides_num - 1])
        nextButton.configure(command=lambda: _next(slides_num + 1))
        if slides_num == 10:
            nextButton.configure(text="done", state=tk.DISABLED)

         
newVariablesButton = ttk.Button(root, text="set computer cordinates", command=newV)
newVariablesButton.grid(column=2, row=5)

root.mainloop()

截图,打开主窗口:

屏幕截图#1。首次单击时在新窗口中打开:

屏幕截图#1,当第二次点击时:

屏幕截图#1,

if slides_num == 10
。您将看到禁用按钮:


0
投票

如果您的目标是使用选项卡式 GUI,而不是自己编写它,Tkinter 有一个小部件可以提供它:

参见:ttk.Notebook

您创建 ttk.Notebook 小部件,然后在笔记本内添加子小部件(通常是框架)。每个子小部件都会在笔记本顶部获得一个带有指定名称的选项卡。

单击选项卡以更改可见的子小部件 - 我认为这就是您想要做的。

它还提供了一个虚拟事件,您可以使用该虚拟事件在用户选择不同的选项卡时执行代码。

互联网上有一些基本教程。

© www.soinside.com 2019 - 2024. All rights reserved.