Tkinter Canvas create_window ()

Я пытаюсь использовать Tkinter Canvas ( self._canvas ) для создания окна с create_window функции create_window . Поле окна для этой функции представляет собой Tkinter Frame ( self._tableFrame ). Может кто-то, пожалуйста, помогите мне в том, как сделать self._tableFrame расширяемым до размера self._canvas (даже после изменения размера окна пользователем)?

Код:

 from Tkinter import Scrollbar as tkScrollBar from Tkinter import Frame as tkFrame from Tkinter import Canvas as tkCanvas from Tkinter import Entry as tkEntry from Tkinter import StringVar as tkStringVar from Tkinter import Tk, HORIZONTAL, N, S, E, W, RIGHT, LEFT, BOTTOM, X, Y, BOTH from Tkinter import TOP class Widget(tkFrame): def __init__(self, master=None): tkFrame.__init__(self, master) self._str = tkStringVar() self._widget = tkEntry(self) self._widget.config(textvariable=self._str, borderwidth=1, width=0) self._widget.pack(expand=True, fill=X) def settext(self, str_): self._str.set(str_) def gettext(self): return self._str.get() class Application(tkFrame): def __init__(self, rows, cols, master=None): tkFrame.__init__(self, master) yScroll = tkScrollBar(self) xScroll = tkScrollBar(self, orient=HORIZONTAL) self._canvas = tkCanvas(self, yscrollcommand=yScroll.set, xscrollcommand=xScroll.set) yScroll.config(command=self._canvas.yview) xScroll.config(command=self._canvas.xview) self._table = [[0 for x in range(rows)] for x in range(cols)] self._tableFrame = tkFrame(self._canvas) for col in range(cols): self._tableFrame.grid_columnconfigure(col, weight=1) for row in range(rows): self._table[row][col] = Widget(master=self._tableFrame) self._table[row][col].settext("(%d, %d)" % (row, col)) self._table[row][col].grid(row=row, column=col, sticky=E+W) # For debugging self._canvas.config(background="blue") self._tableFrame.config(background="red") yScroll.pack(side=RIGHT, fill=Y) xScroll.pack(side=BOTTOM, fill=X) self._canvas.create_window(0, 0, window=self._tableFrame, anchor=N+W) self._canvas.pack(side=LEFT, fill=BOTH, expand=True) tkRoot = Tk() # Application Size and Center the Application appSize = (800, 600) w = tkRoot.winfo_screenwidth() h = tkRoot.winfo_screenheight() x = w / 2 - appSize[0] / 2 y = h / 2 - appSize[1] / 2 tkRoot.geometry("%dx%d+%d+%d" % (appSize + (x, y))) tkRoot.update_idletasks() # Force geometry update app = Application(5, 5, master=tkRoot) app.pack(side=TOP, fill=BOTH, expand=True) tkRoot.mainloop() 

One Solution collect form web for “Tkinter Canvas create_window ()”

Вы можете связать self._canvas с событием <Configure> , а затем вызвать itemconfig с идентификатором фрейма, добавленного в холст (не напрямую ссылкой на виджет):

 def __init__(self, rows, cols, master=None): # ... self._frame_id = self._canvas.create_window(0, 0, window=self._tableFrame, anchor=N+W) self._canvas.pack(side=LEFT, fill=BOTH, expand=True) self._canvas.bind("<Configure>", self.resize_frame) def resize_frame(self, e): self._canvas.itemconfig(self._frame_id, height=e.height, width=e.width) 

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

 import Tkinter as tk # Use tk.Tk, tk.Canvas, etc. 
  • Использовать событие matplotlib pick для запуска при щелчке по центру квадратов pcolormesh?
  • Как удалить объект create_text в холсте?
  • Python, Tkinter - Вставка текста в окна холста
  • Черепаха от руки
  • Вставка gif изображения в холст с помощью Tkinter
  • Как узнать размер элемента canvas в Python / Tkinter?
  • удалить метод на холсте tkinter
  • Python tkinter змея игровой лаг
  •  
    Interesting Posts for Van-Lav

    Flask-SQLAlchemy объединяются в 3 модели и конструкцию таблицы

    gaierror: getaddrinfo не удалось

    Структура папок Python gzip при застегивании одного файла

    Как я могу программно использовать средство проверки правописания / грамматики Microsoft Word?

    врач-варка дает предупреждение о конфигурации python: следует ли удалить эти файлы конфигурации? (Mac)

    pyqt как подключить кнопку остановки

    Соль и хэш пароль в python

    Использование PIL для заполнения пустого пространства изображения соседними цветами (например, inpainting)

    Как вы переопределите метод BaseHTTPRequestHandler log_message () для входа в файл, а не в консоль (sys.stderr)?

    Степень точности классификатора SVM варьируется в разных машинах

    Robot Framework – использование пользовательских библиотек

    Вводные оси, привязанные к определенным точкам в координатах данных?

    Хруст xml с python

    Сериализация члена Enum для JSON

    Фиксация datareader panda от финансов yahoo с Enthought Canopy

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