tkinter canvas create_window
Posted 记录——去繁就简
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了tkinter canvas create_window相关的知识,希望对你有一定的参考价值。
您可以使用画布窗口对象将任何 Tkinter 小部件放置在画布上。窗口是一个可以容纳一个 Tkinter 小部件的矩形区域。
这小组件必须是与相同的顶级窗口的子窗口画布,或位于相同的顶级窗口。
如果要将复杂的多控件对象放在 canvas,您可以使用此方法在画布上放置一个小部件,然后放置其他该框架内的小部件。
要在画布上创建新的画布窗口对象
id = Canvas.create_window(x, y, option, ...)
这将返回对象 窗口对象的 ID。选项包括:
表 15.画布窗口
选项
anchor |
默认值为 , 表示窗口以 (, ) 位置为中心。 请参见第 5.5 节 “锚点”以了解可能的 值。例如,如果指定 ,则将定位窗口 所以点 (, ) 在 其右(东)边缘的中点。anchor=tk.CENTER anchor=tk.E 。值必须 n, ne, e, se, s, sw, w, nw, or center;东:e,南:s;西:w;北:n。
|
height |
为窗口保留的区域的高度。 如果省略,窗口的大小将适合 所包含微件的高度。有关可能的值,请参见第 5.1 节 “尺寸”。 |
state |
默认情况下,窗口项处于该状态。将此选项设置为 使窗口无响应 到鼠标输入,或到 使其隐形。tk.NORMAL tk.DISABLED tk.HIDDEN |
tags |
如果是单个字符串,则窗口标记为 那个字符串。使用字符串元组标记 具有多个标签的窗口。请参见第 8.4 节 “画布 标签”。 |
width |
为窗口保留的区域的宽度。 如果省略,窗口的大小将适合 所包含微件的宽度。 |
window |
使用要放置在画布上的小部件的位置。 如果最初省略了它,您可以稍后调用以将小部件放置在画布上,其中是窗口的对象 ID。window=
|
参考来源:tkinter官方文档:8.15. 画布窗口对象 (tkdocs.com)
tkinter: Canvas+event bind
Draw a plot
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
import random
if sys.version_info[0] < 3:
import Tkinter as tk ## Python 2.x
import tkMessageBox as tk_messagebox
import tkFont as tk_font
else:
import tkinter as tk ## Python 3.x
import tkinter.messagebox as tk_messagebox
import tkinter.font as tk_font
class App(tk.Frame):
def __init__(self, master=None):
tk.Frame.__init__(self, master)
self.master.title("Canvas")
self.lastx = 0
self.lasty = 0
self.active = False
self.font = tk_font.Font(family='Helvetica', size=24, weight='bold')
self.setScreenSize()
self.createWidgets()
def setScreenSize(self):
ratio = 0.8
screen_h = self.master.winfo_screenheight()
screen_w = self.master.winfo_screenwidth()
# print(screen_h, screen_w)
self.app_h = round(screen_h * ratio)
self.app_w = round(screen_w * ratio)
y = round(screen_h * (1 - ratio) / 2.0)
x = round(screen_w * (1 - ratio) / 2.0)
geometry = '' + str(self.app_w) + 'x' + str(self.app_h) + '+' + str(x) + '+' + str(y)
# print(geometry)
self.master.geometry(geometry)
self.config(width=self.app_w, height=self.app_h)
def createWidgets(self):
self.canvas = tk.Canvas(self, width=self.app_w, height=self.app_h, bg="white")
dot_size = 20
x0 = 100
y0 = 100
self.canvas.create_text(100, 50, text='A plot', font=self.font)
for x in range(10):
for y in range(10):
x1 = x0 + dot_size * x
y1 = y0 + dot_size * y
x2 = x1 + dot_size
y2 = y1 + dot_size
self.canvas.create_rectangle(x1, y1, x2, y2, fill=self.getRandColor(), width=2)
self.draw()
def getRandColor(self):
return '#' + self.getRandRGB() + self.getRandRGB() + self.getRandRGB()
def getRandRGB(self):
return ':02X'.format(random.randint(0, 255))
def draw(self):
self.pack()
self.pack_propagate(0)
self.canvas.pack()
self.mainloop()
if __name__ == '__main__':
App()
A simple palette
bind CMD
event type
Using Events With Tkinter Canvas Elements In Python
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
import random
if sys.version_info[0] < 3:
import Tkinter as tk ## Python 2.x
import tkMessageBox as tk_messagebox
else:
import tkinter as tk ## Python 3.x
import tkinter.messagebox as tk_messagebox
class App(tk.Frame):
def __init__(self, master=None):
tk.Frame.__init__(self, master)
self.master.title("Canvas")
self.lastx = 0
self.lasty = 0
self.active = False
self.setScreenSize()
self.createWidgets()
def setScreenSize(self):
ratio = 0.8
screen_h = self.master.winfo_screenheight()
screen_w = self.master.winfo_screenwidth()
# print(screen_h, screen_w)
self.app_h = round(screen_h * ratio)
self.app_w = round(screen_w * ratio)
y = round(screen_h * (1 - ratio) / 2.0)
x = round(screen_w * (1 - ratio) / 2.0)
geometry = '' + str(self.app_w) + 'x' + str(self.app_h) + '+' + str(x) + '+' + str(y)
# print(geometry)
self.master.geometry(geometry)
self.config(width=self.app_w, height=self.app_h)
def createWidgets(self):
self.canvas = tk.Canvas(self, width=self.app_w, height=self.app_h, bg="white")
self.canvas.bind('<Button-1>', self.canvasClick)
self.canvas.bind('<ButtonRelease-1>', self.canvasRelease)
self.canvas.bind('<Motion>', self.canvasMotion)
self.draw()
def canvasClick(self, event):
self.active = True
self.lastx = event.x
self.lasty = event.y
def canvasRelease(self, event):
self.active = False
def canvasMotion(self, event):
if(self.active):
self.canvas.create_line(self.lastx, self.lasty, event.x, event.y, width=4, fill="red")
self.lastx = event.x
self.lasty = event.y
def draw(self):
self.pack()
self.pack_propagate(0)
self.canvas.pack()
self.mainloop()
if __name__ == '__main__':
App()
以上是关于tkinter canvas create_window的主要内容,如果未能解决你的问题,请参考以下文章