Как заставить изображение работать внутри функции в tkinter - PullRequest
0 голосов
/ 12 июля 2020

Привет, у меня есть изображение внутри функции, которое не появляется там, где должно быть. Изображение сохраняется в той же папке, что и код. Посмотрев на решения, я обнаружил, что мне нужно сделать изображение глобальной переменной, чтобы оно работало. Я сделал это, и после того, как это снова не сработало, я попытался сделать некоторые другие переменные глобальными, поскольку я не был уверен, что сделал это правильно.

Мне также интересно, может ли проблема быть в том, что геометрия не работает из-за чтобы он находился в функции

Вот как он должен выглядеть (верхняя левая кнопка «Домой», значок «Домой» - изображение) Heres what it should look like And heres how its turning out when inside a function Вот как это выглядит при запуске внутри функции

Вот функция, если вы хотите ее посмотреть


from tkinter import *

def resourcePage():
    global homeIcon
    global file

    resource = Tk()
    resource.title("Resource Page")
    resource.resizable(0, 0)

    header = LabelFrame(resource, bg="white")
    content = LabelFrame(resource, bg="white")

    header.columnconfigure(0, weight=1)  # Forces column to expand to fill all available space
    homeButton = Button(content, width=50, height=50)
    try:
        homeIcon = PhotoImage(file="yes.png")
        homeButton.config(image=homeIcon)
        homeButton.image = homeIcon
    except TclError:
        print("Home")
    homeButton.grid(row=1, column=0, sticky="w", padx=2, pady=2)

    # each section of code below is for their respective labels on the page
    papersLabel = Label(content, text="Exam Papers", bg="#12a8e3", fg="white", font=("Ariel", 26, "bold"),
                        activebackground="#12a8e3", anchor="w", padx=15)
    papersLabel.grid(row=2, column=0, padx=15, pady=(15, 5), ipadx=429, ipady=10)
    papersPhysics = Label(content, text="Physics:", bg="white", font=("Ariel", 22), anchor="w")
    papersPhysics.grid(row=3, column=0, sticky="w", padx=20)
    papersHyperlinks = Label(content, text="• Hyperlinks here", bg="white", font=("Ariel", 18), anchor="w")
    papersHyperlinks.grid(row=4, column=0, sticky="w", padx=24)
    papersCS = Label(content, text="Computer Science:", bg="white", font=("Ariel", 22), anchor="w")
    papersCS.grid(row=5, column=0, sticky="w", padx=20)
    papersHyperlinks = Label(content, text="• Hyperlinks here", bg="white", font=("Ariel", 18), anchor="w")
    papersHyperlinks.grid(row=6, column=0, sticky="w", padx=24)

    questionsLabel = Label(content, text="Practice Exam Questions:", bg="#12a8e3", fg="white",
                           font=("Ariel", 26, "bold"), activebackground="#12a8e3", anchor="w", padx=15)
    questionsLabel.grid(row=7, column=0, padx=15, pady=(25, 5), ipadx=328, ipady=10)
    questionsPhysics = Label(content, text="Physics:", bg="white", font=("Ariel", 22), anchor="w")
    questionsPhysics.grid(row=8, column=0, sticky="w", padx=20)
    questionsHyperlinks = Label(content, text="• Hyperlinks here", bg="white", font=("Ariel", 18), anchor="w")
    questionsHyperlinks.grid(row=9, column=0, sticky="w", padx=24)
    questionsCS = Label(content, text="Computer Science:", bg="white", font=("Ariel", 22), anchor="w")
    questionsCS.grid(row=10, column=0, sticky="w", padx=20)
    questionsHyperlinks = Label(content, text="• Hyperlinks here", bg="white", font=("Ariel", 18), anchor="w")
    questionsHyperlinks.grid(row=11, column=0, sticky="w", padx=24)

    videosLabel = Label(content, text="Helpful Videos:", bg="#12a8e3", fg="white", font=("Ariel", 26, "bold"),
                        activebackground="#12a8e3", anchor="w", padx=15)
    videosLabel.grid(row=12, column=0, padx=15, pady=(25, 5), ipadx=415, ipady=10)
    videosPhysics = Label(content, text="Physics:", bg="white", font=("Ariel", 22), anchor="w")
    videosPhysics.grid(row=13, column=0, sticky="w", padx=20)
    videosHyperlinks = Label(content, text="• Hyperlinks here", bg="white", font=("Ariel", 18), anchor="w")
    videosHyperlinks.grid(row=14, column=0, sticky="w", padx=24)
    videosCS = Label(content, text="Computer Science:", bg="white", font=("Ariel", 22), anchor="w")
    videosCS.grid(row=15, column=0, sticky="w", padx=20)
    videosHyperlinks = Label(content, text="• Hyperlinks here", bg="white", font=("Ariel", 18), anchor="w")
    videosHyperlinks.grid(row=16, column=0, sticky="w", padx=24,
                          pady=(0, 25))  # y padding here to keep some space from the bottom of the page

    header.grid(row=0, sticky='NSEW')
    content.grid(row=1, sticky='NSEW')

1 Ответ

1 голос
/ 13 июля 2020

Как указано в комментариях, сообщения, возникающие при возникновении исключения TclError, подавляются.

Попытайтесь изменить предложение except

except TclError as Error:
        print(Error)

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

couldn't open "yes.png": no such file or directory

EDIT

Полученный результат с помощью заполнитель test.png:

result of running the modified script

Modified script

from tkinter import *

def resourcePage():
    global homeIcon
    global file

    resource = Tk()
    resource.title("Resource Page")
    resource.resizable(0, 0)

    header = LabelFrame(resource, bg="white")
    content = LabelFrame(resource, bg="white")

    header.columnconfigure(0, weight=1)  # Forces column to expand to fill all available space
    homeButton = Button(content, width=50, height=50)
    try:
        #Modification 1:
            # Either provide a full or relative path or
            # change the working directory by import os; os.chdir()
        homeIcon = PhotoImage(file="X:/SomeFolder/yes.png")
        homeButton.config(image=homeIcon)
        homeButton.image = homeIcon
        #Modification 2:
    except TclError as Error:
        print(Error)
    homeButton.grid(row=1, column=0, sticky="w", padx=2, pady=2)

    # each section of code below is for their respective labels on the page
    papersLabel = Label(content, text="Exam Papers", bg="#12a8e3", fg="white", font=("Ariel", 26, "bold"),
                        activebackground="#12a8e3", anchor="w", padx=15)
    papersLabel.grid(row=2, column=0, padx=15, pady=(15, 5), ipadx=429, ipady=10)
    papersPhysics = Label(content, text="Physics:", bg="white", font=("Ariel", 22), anchor="w")
    papersPhysics.grid(row=3, column=0, sticky="w", padx=20)
    papersHyperlinks = Label(content, text="• Hyperlinks here", bg="white", font=("Ariel", 18), anchor="w")
    papersHyperlinks.grid(row=4, column=0, sticky="w", padx=24)
    papersCS = Label(content, text="Computer Science:", bg="white", font=("Ariel", 22), anchor="w")
    papersCS.grid(row=5, column=0, sticky="w", padx=20)
    papersHyperlinks = Label(content, text="• Hyperlinks here", bg="white", font=("Ariel", 18), anchor="w")
    papersHyperlinks.grid(row=6, column=0, sticky="w", padx=24)

    questionsLabel = Label(content, text="Practice Exam Questions:", bg="#12a8e3", fg="white",
                           font=("Ariel", 26, "bold"), activebackground="#12a8e3", anchor="w", padx=15)
    questionsLabel.grid(row=7, column=0, padx=15, pady=(25, 5), ipadx=328, ipady=10)
    questionsPhysics = Label(content, text="Physics:", bg="white", font=("Ariel", 22), anchor="w")
    questionsPhysics.grid(row=8, column=0, sticky="w", padx=20)
    questionsHyperlinks = Label(content, text="• Hyperlinks here", bg="white", font=("Ariel", 18), anchor="w")
    questionsHyperlinks.grid(row=9, column=0, sticky="w", padx=24)
    questionsCS = Label(content, text="Computer Science:", bg="white", font=("Ariel", 22), anchor="w")
    questionsCS.grid(row=10, column=0, sticky="w", padx=20)
    questionsHyperlinks = Label(content, text="• Hyperlinks here", bg="white", font=("Ariel", 18), anchor="w")
    questionsHyperlinks.grid(row=11, column=0, sticky="w", padx=24)

    videosLabel = Label(content, text="Helpful Videos:", bg="#12a8e3", fg="white", font=("Ariel", 26, "bold"),
                        activebackground="#12a8e3", anchor="w", padx=15)
    videosLabel.grid(row=12, column=0, padx=15, pady=(25, 5), ipadx=415, ipady=10)
    videosPhysics = Label(content, text="Physics:", bg="white", font=("Ariel", 22), anchor="w")
    videosPhysics.grid(row=13, column=0, sticky="w", padx=20)
    videosHyperlinks = Label(content, text="• Hyperlinks here", bg="white", font=("Ariel", 18), anchor="w")
    videosHyperlinks.grid(row=14, column=0, sticky="w", padx=24)
    videosCS = Label(content, text="Computer Science:", bg="white", font=("Ariel", 22), anchor="w")
    videosCS.grid(row=15, column=0, sticky="w", padx=20)
    videosHyperlinks = Label(content, text="• Hyperlinks here", bg="white", font=("Ariel", 18), anchor="w")
    videosHyperlinks.grid(row=16, column=0, sticky="w", padx=24,
                          pady=(0, 25))  # y padding here to keep some space from the bottom of the page

    header.grid(row=0, sticky='NSEW')
    content.grid(row=1, sticky='NSEW')

    #Modification 3
    resource.mainloop()
resourcePage()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...