Я делаю шахматную программу и хочу иметь возможность перетаскивать фигуры. Для этого я помещаю изображение части на Canvas
, чтобы его можно было перетащить (я также могу использовать Label
, если хочу). Однако, когда я перетаскиваю кусок, появляется белый квадрат, окружающий его изображение.
Когда я исследовал проблему, многие люди дали следующее решение:
drag_canvas = Canvas(self, height=80, width=80, bg = "yellow")
root.wm_attributes("-transparentcolor", "yellow")
Это привело к тому, что фон стал прозрачным, но была видна не шахматная доска, а программа, лежащая в основе графического интерфейса.
Есть ли способ сделать фон прозрачным и показать шахматную доску позади, а не программу за окном tkinter?
Примечание: я не против использования любого другого виджета (например, Label
), но они должны использовать модули, которые по умолчанию поставляются с Python (без PIL), поскольку эту программу необходимо использовать в среде, где я не могу загружать другие модули.
@stovfl, использующий PIL
Ваши цены уже прозрачный, почему вы хотите использовать .Canvas(...
? Редактировать свой вопрос и добавьте информацию о формате изображения.
@stovfl Да, они прозрачные, но для того, чтобы их можно было перетаскивать по доске, мне нужно поместить их на какой-то виджет. Этот виджет имеет непрозрачный фон, поэтому мне нужно было сделать фон прозрачным. Я просто использовал Canvas
, потому что подумал, что это будет лучший способ, судя по аналогичным сообщениям в stackoverflow. Итак, если есть способ добиться этого без Canvas
, я более чем счастлив его использовать.
Question: How to make a tkinter canvas background transparent?
Единственно возможный вариант config(...
, обнулить фон
c.config(bg='')
results with: _tkinter.TclError: unknown color name ""
Чтобы получить такой результат:
вы должны держать шахматную доску и фигуры в одном .Canvas(...
.
self.canvas = Canvas(self, width=500, height=200, bd=0, highlightthickness=0)
self.canvas.create_rectangle(245,50,345,150, fill='white')
self.image = tk.PhotoImage(file='chess.png')
self.image_id = self.canvas.create_image(50,50, image=self.image)
self.canvas.move(self.image_id, 245, 100)
Протестировано с Python: 3.5 - TkVersion: 8.6
Извините, но вопрос в том, как получить прозрачный холст. Вы устроили обходной маневр, сказав поместить изображение на тот же холст. Как это отвечает на вопрос? В моем случае мне нужно разместить свое изображение и фон на разных холстах.
Прочтите это обновление-tkinter-label-with-an-image