Как создать кнопку на холсте tkinter?

Я создал рамку, а затем холст.
Что я хочу сделать дальше, так это добавить кнопку на холсте.
Однако, когда я упаковал Button, я не вижу Canvas!

Вот что я пробовал:

  • изменить изображение на основе щелчка в pygame
  • Изображение на кнопке
  • PyQt4 - Перетаскивание
  • Как сделать кнопки в python / pygame?
  • Как изменить текст метки Tkinter при нажатии кнопки
  • Python & PyGTK: остановка при нажатии кнопки
  • from Tkinter import Tk, Canvas, Frame, Button from Tkinter import BOTH, W, NW, SUNKEN, TOP, X, FLAT, LEFT class Example(Frame): def __init__(self, parent): Frame.__init__(self, parent) self.parent = parent self.initUI() def initUI(self): self.parent.title("Layout Test") self.config(bg = '#F0F0F0') self.pack(fill = BOTH, expand = 1) #create canvas canvas1 = Canvas(self, relief = FLAT, background = "#D2D2D2", width = 180, height = 500) canvas1.pack(side = TOP, anchor = NW, padx = 10, pady = 10) #add quit button button1 = Button(canvas1, text = "Quit", command = self.quit, anchor = W) button1.configure(width = 10, activebackground = "#33B5E5", relief = FLAT) button1.pack(side = TOP) def main(): root = Tk() root.geometry('800x600+10+50') app = Example(root) app.mainloop() if __name__ == '__main__': main() 

  • Имитация нажатий клавиш в python с использованием pywin32
  • Кросс-платформенный набор инструментов gui для развертывания приложений Python
  • mechanize python нажмите кнопку
  • wxPython: вызов события вручную
  • Вождение программы графического интерфейса Windows из сценария
  • Должен ли я делать тихие исключения громче в tkinter?
  • 2 Solutions collect form web for “Как создать кнопку на холсте tkinter?”

    Менеджер pack Tkinter пытается изменить размер родительского виджета на правильный размер, чтобы содержать дочерние виджеты, и по умолчанию не больше. Таким образом, холст есть, но он точно такой же, как и кнопка, и тем самым невидим.

    Если вы хотите поместить виджет на холст, не вызывая динамического изменения размера холста, вам нужна Canvas.create_window() :

     # ... snip ... button1 = Button(self, text = "Quit", command = self.quit, anchor = W) button1.configure(width = 10, activebackground = "#33B5E5", relief = FLAT) button1_window = canvas1.create_window(10, 10, anchor=NW, window=button1) 

    Это создаст вашу кнопку с верхним левым углом в (10, 10) относительно холста, без изменения размера самого холста.

    Обратите внимание, что вы можете заменить аргумент window ссылкой на любой другой виджет Tkinter. Однако одно предостережение: названный виджет должен быть дочерним элементом окна верхнего уровня, содержащего холст, или дочернего элемента какого-либо виджета, расположенного в том же окне верхнего уровня.

    вы можете использовать диспетчер геометрии button1.place (x = 0, y = 0) вместо пакета (side = TOP), чтобы изменить размер главного виджета, чтобы сделать его достаточно большим, чтобы удерживать дочерний виджет

    http://effbot.org/tkinterbook/pack.htm#Tkinter.Pack.pack_propagate-method

    http://effbot.org/tkinterbook/place.htm

    Python - лучший язык программирования в мире.