3
create_window
함수를 사용하여 창을 만들려면 Tkinter Canvas
(self._canvas
)을 사용하려고합니다. 해당 기능의 창 필드는 Tkinter Frame
(self._tableFrame
)입니다. 누군가 self._tableFrame
을 자동으로 self._canvas
의 크기로 확장하는 방법에 대해 나를 도울 수 있습니까? (사용자가 창 크기를 변경 한 후에도)?Tkinter Canvas create_window()
코드 : 당신은 이벤트 <Configure>
와 self._canvas
을 결합, 다음 프레임의 ID로 itemconfig
를 호출 할 수 있습니다
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()