Как открыть графический интерфейс с помощью кнопки в tkinter?

#python #tkinter #python-3.9 #thonny

Вопрос:

В настоящее время я работаю над проектом, в котором есть домашняя страница и строка меню. В строке меню, когда выбор сделан, он должен открыть другой графический интерфейс. Однако я получаю ошибку, как показано на рисунке.

 Exception in Tkinter callback
Traceback (most recent call last):
  File "C:Users****AppDataLocalProgramsThonnylibtkinter__init__.py", line 1705, in __call__
    return self.func(*args)
  File "C:Users****Desktop*********************Homepage.py", line 41, in MSC_01
    my_label = Label(root, image=bg)
  File "C:Users****AppDataLocalProgramsThonnylibtkinter__init__.py", line 2766, in __init__
    Widget.__init__(self, master, 'label', cnf, kw)
  File "C:Users****AppDataLocalProgramsThonnylibtkinter__init__.py", line 2299, in __init__
    (widgetName, self._w)   extra   self._options(cnf))
_tkinter.TclError: image "pyimage2" doesn't exist
 

Мне интересно, может ли кто-нибудь помочь мне здесь, так как я не знаю, почему это происходит. Ниже прилагается мой код.

 import csv,random,time,os
from itertools import count
import pandas as pd
import numpy as np
import tkinter as tk
from tkinter import*
from PIL import ImageTk, Image

root = Tk()
root.title('LV Condition Monitoring')
root.geometry("1000x980")

#define image
bg1 = PhotoImage(file="C:/Users/****/Desktop/******/******/****/******.png")

my_label1 = Label(root, image=bg1)
my_label1.place(x=0, y=0, relwidth=1, relheight=1)

my_text1 = Label(root, text="Low Voltage Condition Monitoring", font=("Arial",20), fg="black")
my_text1.pack(pady=50)
    
my_menu = Menu(root)
root.configure(menu=my_menu)

def MSC_01():
    *tkinter GUI code*

#Create menu item
open_menu = Menu(my_menu)
my_menu.add_cascade(label="Open", menu=open_menu)
open_menu.add_command(label="MSC 01", command=MSC_01)

root.mainloop()
 

Комментарии:

1. Код в вашей обратной трассировке не совпадает с кодом в вашем примере. Вы же не пытаетесь создать вторую root , не так ли?

2. Использовать <tk.Toplevel()> для нового окна

3. @TimRoberts Я на самом деле пытаюсь создать 2-й корень

4. @Sujay, поэтому я добавляю его в корень = tk. Верхний уровень() ?

5. Только не так. abc=Topleve() . Затем используйте abc или любую другую переменную в качестве основной для виджетов, которые вы хотите разместить во втором окне