Почему изображение не отображается на холсте? [Python3 + ткинтер] - PullRequest
0 голосов
/ 13 марта 2020

Я программировал приложение, используя tkinter и python 3. Я создал холст и пытаюсь отобразить на нем изображение в формате gif 5000x5000 пикселей, где холст 2000x2000 пикселей, но изображение не появляется при запуске программы. Это код:

class drawCanvas(object):

    def __init__(self, master, width=500, height=500):
        ''' build the canvas object '''

        # class attributes
        self.master = master
        self.cWidth = width
        self.cHeight = height

        # creating the canvas object
        self.canvas = tk.Canvas(self.master, width=self.cWidth, height=self.cHeight, bg="white")
        self.canvas.grid(row=0, column=2, sticky="nwes")
        self.canvas.configure(scrollregion=(0, 0, 2000, 2000))

        # creating the scrolling
        self.scroll_x = tk.Scrollbar(self.master, orient="horizontal", command=self.canvas.xview)
        self.scroll_x.grid(row=1, column=2, sticky="ew")

        self.scroll_y = tk.Scrollbar(self.master, orient="vertical", command=self.canvas.yview)
        self.scroll_y.grid(row=0, column=3, sticky="ns")

        self.canvas.configure(yscrollcommand=self.scroll_y.set, xscrollcommand=self.scroll_x.set)

        # trying to import an image
        self.canvas.create_image(500, 500, anchor="nw", image=r'C:\Users\Luca\Desktop\electronic_simulation\src\bg\try.gif')

Мне интересно, есть ли какое-нибудь решение, если есть, пожалуйста, скажите мне. Спасибо за ваше время!

1 Ответ

1 голос
/ 14 марта 2020

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

C:\\Users\\Luca\\Desktop\\electronic_simulation\\src\\bg\\try.gif

или

C:/Users/Luca/Desktop/electronic_simulation/src/bg/try.gif

редактировать: я думаю, что я решил вашу проблему:

class drawCanvas(object):

    def __init__(self, master, width=500, height=500):
        ''' build the canvas object '''
        global img

        # class attributes
        self.master = master
        self.cWidth = width
        self.cHeight = height

        # creating the canvas object
        self.canvas = tk.Canvas(self.master, width=self.cWidth, height=self.cHeight, bg="white")
        self.canvas.grid(row=0, column=2, sticky="nwes")
        self.canvas.configure(scrollregion=(0, 0, 2000, 2000))

        # creating the scrolling
        self.scroll_x = tk.Scrollbar(self.master, orient="horizontal", command=self.canvas.xview)
        self.scroll_x.grid(row=1, column=2, sticky="ew")

        self.scroll_y = tk.Scrollbar(self.master, orient="vertical", command=self.canvas.yview)
        self.scroll_y.grid(row=0, column=3, sticky="ns")

        self.canvas.configure(yscrollcommand=self.scroll_y.set, xscrollcommand=self.scroll_x.set)

        # trying to import an image

        self.img = tk.PhotoImage(file = "C:\\Users\\Luca\\Desktop\\electronic_simulation\\src\\bg\\try.gif") 
        self.canvas.create_image(0, 0, anchor="nw", image=self.img)

новое редактирование: как я не знаю контекст вашего скрипта, я создал скрипт, который работает для меня, и вы можете копировать-вставлять и запускать напрямую:

import tkinter as tk
class drawCanvas(object):

    def __init__(self, master, width=500, height=500):
        ''' build the canvas object '''
        global img

        # class attributes
        self.master = master
        self.cWidth = width
        self.cHeight = height

        # creating the canvas object
        self.canvas = tk.Canvas(self.master, width=self.cWidth, height=self.cHeight, bg="white")
        self.canvas.grid(row=0, column=2, sticky="nwes")
        self.canvas.configure(scrollregion=(0, 0, 2000, 2000))

        # creating the scrolling
        self.scroll_x = tk.Scrollbar(self.master, orient="horizontal", command=self.canvas.xview)
        self.scroll_x.grid(row=1, column=2, sticky="ew")

        self.scroll_y = tk.Scrollbar(self.master, orient="vertical", command=self.canvas.yview)
        self.scroll_y.grid(row=0, column=3, sticky="ns")

        self.canvas.configure(yscrollcommand=self.scroll_y.set, xscrollcommand=self.scroll_x.set)

        # trying to import an image

        self.img = tk.PhotoImage(file = r"C:\Users\Luca\Desktop\electronic_simulation\src\bg\try.gif")
        self.canvas.create_image(0, 0, anchor="nw", image=self.img)

    def ml(self):
        self.master.mainloop()

test = drawCanvas(tk.Tk())
test.ml()
...