canvar画布
canvar (画布)是一个矩形区域,可以放置图形、图像、组件等。
代码演示
from tkinter import * import tkinter as tk from PIL import Image, ImageTk import random class Application(tk.Frame): def __init__(self, master=None): tk.Frame.__init__(self, master) self.master = master self.pack() self.createWidget() def createWidget(self): # 创建一个画布 self.canvas = Canvas(self, width=300, height=200, bg='yellow') self.canvas.pack() # 画一条直线 line = self.canvas.create_line(10, 10, 30, 15, 40, 60) # 画一个矩形 rect = self.canvas.create_rectangle(50, 50, 100, 100) # 画一个椭圆,坐标两双,为椭圆的边界矩形的左上角和底部右下角 oval = self.canvas.create_oval(50, 50, 100, 100) global img photo = Image.open('1.gif') photo = photo.resize((50, 50)) img = ImageTk.PhotoImage(photo) self.canvas.create_image(150, 170, image=img) Button(self, text='画十个矩形', command=self.draw50Recg).pack(side='left') def draw50Recg(self): for i in range(10): x1 = random.randrange(int(self.canvas['width'])/2) y1 = random.randrange(int(self.canvas['height'])/2) x2 = x1 + random.randrange(int(self.canvas['width'])/2) y2 = y1 + random.randrange(int(self.canvas['height'])/2) self.canvas.create_rectangle(x1, y1, x2, y2) if __name__ == '__main__': root = Tk() root.title('Cancas画布测试') root.geometry('400x300+200+300') app = Application(root) root.mainloop()
运行结果
点击画十个矩形的按钮后
二、Text文本框的使用
代码演示
import tkinter as tk from tkinter import messagebox from tkinter import * import webbrowser class Application(tk.Frame): def __init__(self, master=None): tk.Frame.__init__(self,master) self.master = master self.pack() self.createWidget() def createWidget(self): self.w1 = Text(self, width=40, height=12, bg='gray') self.w1.pack() # 在文本框中插入内容 self.w1.insert(1.0, '0123456789\nabcdefg') self.w1.insert(2.3, '锄禾日当午,汗滴禾下土,设置盘中餐,粒粒皆辛苦\n') Button(self, text='重复输入文本', command=self.insertText).pack(side='left') Button(self, text='返回文本', command=self.returnText).pack(side='left') Button(self, text='添加图片', command=self.addImage).pack(side='left') Button(self, text='添加组件', command=self.addWidget).pack(side='left') Button(self, text='通过tag精确控制文本', command=self.testTag).pack(side='left') def insertText(self): # INSERT索引表示在光标处插入 self.w1.insert(INSERT, 'QinAfeng') # END索引号表示在最后插入 self.w1.insert(END, '啊哈') def returnText(self): # Indexes(索引)是用来指向Text组件中文本的位置,Text的组件索引也是对应实际字符之间的位置 # 核心:行号以1开始,列号以0开始 print(self.w1.get(1.2,1.6)) self.w1.insert(2.4, 'www') print('所有文本内容:\n'+ self.w1.get(1.0, END)) def addImage(self): self.photo = PhotoImage(file='1.gif') self.w1.image_create(END, image=self.photo) def addWidget(self): b1 = Button(self.w1, text='Python') # 在text创建组件的命令 self.w1.window_create(INSERT, window=b1) def testTag(self): self.w1.delete(1.0, END) self.w1.insert(INSERT, 'Good study Day Day up!\n黄河之水\n天上来\n奔流到海\n不复回\n百度一下') self.w1.tag_add('Good',1.0,1.4) self.w1.tag_config('Good', background='yellow', foreground='red') self.w1.tag_add('百度', 6.0,6.2) self.w1.tag_config('百度', underline=True) self.w1.tag_bind('百度', '<Button-1>', self.webshow) def webshow(self,event): webbrowser.open('http://www.baidu.com') if __name__ == '__main__': root = Tk() root.title('Text文本框的使用') app = Application(root) root.mainloop()
代码中需注意的地方:
INSERT索引表示在光标处插入
Indexex索引,行以1开始,列以0开始
如:self.w1.insert(2.4, 'www'),表示从第2行,第4列开始插入
运行结果