Я экспериментирую с приведенным ниже кодом, чтобы укрепить некоторые идеи, которые у меня есть. Однако это не работает, потому что у холста нет никаких измерений до конца кода, и к этому времени уже слишком поздно что-либо делать. Как я могу определить размеры холста, чтобы использовать его в строке "divw = int (screen_width/100)"?
#!/usr/bin/python3
from tkinter import *
window = Tk()
window.title('Timetable')
window.attributes('-zoomed', True)
screen_width = window.winfo_width()
screen_height = window.winfo_height()
canvas = Canvas(window, width = window.winfo_screenwidth(), height = window.winfo_screenheight(), bg='steelblue')
canvas.pack()
image = PhotoImage(file='blank.png')
screen_width = window.winfo_width()
screen_height = window.winfo_height()
divw = int(screen_width / 100)
print (divw)
for i in range(0, divw):
print (i)
canvas.create_image(i * 100+50, 50, anchor = NW, image=image)
mainloop()
Попробуйте сделать это:
try:
import Tkinter as tk
except:
import tkinter as tk
class myCanvas(tk.Frame):
def __init__(self, root):
#self.root = root
self.w = 600
self.h = 400
self.canvas = tk.Canvas(root, width=self.w, height=self.h)
self.canvas.pack( fill=tk.BOTH, expand=tk.YES)
root.bind('<Configure>', self.resize)
def resize(self, event):
self.w = event.width
self.h = event.height
print ('width = {}, height = {}'.format(self.w, self.h))
root = tk.Tk()
root.title('myCanvas')
myCanvas(root)
root.mainloop()
работает для меня.
Попробуйте вызвать tkinter.update()
перед window.winfo_width()
window.update()
, это метод виджета, а не глобальная функция tkinter. Кроме того, вам не нужно принудительно обновлять весь графический интерфейс, вы можете просто выполнитьwindow.update_idletasks()