Поставить виджеты на холст Ткинтер - PullRequest
0 голосов
/ 04 апреля 2020

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

import tkinter as tk
from tkinter import * 

class Layout(tk.Frame):
    def __init__ (self, master=None):
        super().__init__(master) 
        self.master= master
        self.pack()
        self.my_widget()

    def my_widget(self):

      self.C1 = Canvas(height=500, width=400)
      self.C1.place(height=1, width=3, anchor=NW)
      bgi= PhotoImage(file='bgi.png')
      self.C1.create_image(0,0,image=bgi,anchor=NW)
      self.buttonhc=tk.Button(self, height=1, width=3, bd=0.4, background='green')
      self.buttonhc["text"] = "HC"
      self.buttonhc.grid(row=3, column=2, pady=(100,2), padx=(5,5))


root=tk.Tk()
C = Canvas(root, height=500, width=400)
C.master.geometry("500x400")
C.master.maxsize(500, 400)
C.pack(expand=YES, fill=BOTH)
bgi= PhotoImage(file='bgi.png')
C.create_image(0,0,image=bgi,anchor=NW)
app = Layout(master=C)
app.mainloop() 

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

Заранее спасибо.

1 Ответ

2 голосов
/ 04 апреля 2020

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

В ваших спецификациях c case, вы можете просто передать C в качестве мастера при вызове Layout:

app = Layout(master=C)

Учитывая, что все в Layout является потомком Layout, это будет прекрасно работать.

Если вы находите это неудобным, другое решение - использовать place, чтобы поместить холст в окно root, а затем создать все остальные виджеты, которые вы хотите, как обычно. Использование place и создание холста перед любыми другими виджетами позволит вам использовать pack или grid в обычном режиме в окне root, и все они появятся в верхней части холста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...