精华内容
下载资源
问答
  • 简介在设计GUI程序时,可以使用三种方法包装和定位各组件在容器或窗口内的位置这三种方法又称窗口控件配置管理员(Widget Layout Manager)pack 方法grid 方法place 方法place 方法这是使用直接指定方式将控件放在容器...

    简介

    在设计GUI程序时,可以使用三种方法包装和定位各组件在

    容器

    窗口

    内的位置

    这三种方法又称窗口控件

    配置管理员

    (Widget Layout Manager)

    pack 方法

    grid 方法

    place 方法

    place 方法

    这是使用直接指定方式将控件放在容器(窗口)中的方法

    语法格式:

    place(options,...)

    它的参数有

    height/width

    relx/rely

    x/y

    relheight/relwidth

    bordermode

    anchor

    x/y 参数

    place()方法类的x和y参数可直接设定窗口组件的

    左上方位置

    ,单位是

    像素

    窗口显示器的左上角是(x=0, y=0),X是向右递增,y是向下递增。

    同时使用这种方法时,窗口将不会自动重设大小,而是使用默认的大小显示

    例子

    import tkinter

    # 创建主窗口

    root = tkinter.Tk()

    lab1 = tkinter.Label(root, text="One",

    bg="lightgreen",

    width=8)

    lab2 = tkinter.Label(root, text="Two",

    bg="lightblue",

    width=8)

    lab3 = tkinter.Label(root, text="Three",

    bg="lightyellow",

    width=8)

    lab1.place(x=0, y=0)

    lab2.place(x=20, y=40)

    lab3.place(x=50, y=80)

    root.mainloop()

    运行结果:

    这个就是控件的

    左上角

    距离外轴跟x轴的距离

    但是我们如果增加距离,窗口就不会因为控件变大而变大

    例子

    import tkinter

    # 创建主窗口

    root = tkinter.Tk()

    lab1 = tkinter.Label(root, text="One",

    bg="lightgreen",

    width=8)

    lab2 = tkinter.Label(root, text="Two",

    bg="lightblue",

    width=8)

    lab3 = tkinter.Label(root, text="Three",

    bg="lightyellow",

    width=8)

    lab1.place(x=0, y=0)

    lab2.place(x=20, y=40)

    lab3.place(x=170, y=80)

    root.mainloop()

    运行结果:

    width/height 参数

    有时候在设计窗口,应用程序时,所预留的空间有限,如果想要将图片插入窗口内,却担心图片太大,可以在插入图片的同时设定图片的大小,这样就很方便了。

    这个时候我们就可以使用

    width/height

    参数了,这两个参数可以直接设定控件的实体大小

    例子

    import tkinter

    # 创建主窗口

    root = tkinter.Tk()

    root.geometry("300x200")

    img = tkinter.PhotoImage(file="1.png")

    lab1 = tkinter.Label(root, image=img)

    lab1.place(x=20, y=30, width=200, height=150)

    root.mainloop()

    运行结果:

    当然,如果设置的大小太小了,也会导致图片变形挤压的

    例子

    lab1.place(x=20, y=30, width=100, height=60)

    运行结果:

    可以对比一下,很清楚,已经变形了

    relx/rely

    参数与

    relwidth/relheight

    参数

    relx/rely

    参数可以设置

    相对

    于父容器(或者父窗口)的位置

    relwidth/relheight

    参数可以设置

    相对

    于父容器(或者父窗口)的大小

    这个相对位置和相对大小是相对于父容器而言,其值为

    0.0~1.0

    import tkinter

    # 创建主窗口

    root = tkinter.Tk()

    root.geometry("150x120")

    img = tkinter.PhotoImage(file="1.png")

    lab1 = tkinter.Label(root, image=img)

    lab1.place(x=20, y=30, relwidth=0.8, relheight=0.8)

    root.mainloop()

    运行结果:

    如果达到了图片的原始大小,无论怎么拖拽都不会增大了

    我们再改善一下

    例子

    lab1.place(relwidth=1, relheight=1)

    这样或许看的更加直观一点

    运行结果:

    下面我们来看

    relx/rely

    例子:

    import tkinter

    # 创建主窗口

    root = tkinter.Tk()

    img = tkinter.PhotoImage(file="1.png")

    lab1 = tkinter.Label(root, image=img)

    lab1.place(relx=0.5, rely=0.5)

    root.mainloop()

    运行结果:

    相对于窗口的大小,来定位

    我们这里是

    0.5

    ,所以位置就是相对于窗口的0.5来算的

    总结:

    我们在做GUI设计时,虽然使用

    place

    方法可以很精准的设置控件的位置,但是我们一般不使用这个方法,尽量使用

    pack

    grid

    方法

    因为如果我们用

    place

    方法,同时有新增或者减少组件时,又必须要重新设置组件的位置,这样会很不方便

    谢谢观看,笔者会持续更新,如有错误或者建议,请私信我

    展开全文
  • 本文在前面文章基础上介绍tkinter添加图片和文本,在这之前,我们需要安装一个图片库,叫Pillow,这个需要下载exe文件,根据下面图片下载和安装。 下载完后直接双击安装exe,默认点击下一步,直到安装完成,会自动...
  • Python Tkinter Text控件

    2018-01-04 22:50:00
    这篇博客主要是简单的说一下Tkinter中的Text控件的相关知识。 Text文本组件用于显示和处理多行文本。在Tkinter的所有组件中,Text组件显得异常强大和灵活,它适用于处理多任务,虽然该组件的主要目的是显示多行文本...

    原文地址: http://blog.csdn.net/bemorequiet/article/details/54743889

    这篇博客主要是简单的说一下Tkinter中的Text控件的相关知识。

    Text文本组件用于显示和处理多行文本。在Tkinter的所有组件中,Text组件显得异常强大和灵活,它适用于处理多任务,虽然该组件的主要目的是显示多行文本,但它常常被用于作为简单的文本编辑器和网页浏览器使用。

    当创建一个Text组件的时候里面是没有内容的。为了给其插入内容,可以使用insert()以及INSERT或END索引号。

    1.普通的Text组件

    from tkinter import *
    root = Tk()
    
    text1 = Text(root,width=30,height=4)
    #INSERT索引表示在光标处插入
    text1.insert(INSERT,'I Love') #END索引号表示在最后插入 text1.insert(END,' you') text1.pack() mainloop()

     

    2.插入Button之后的Text组件

    from tkinter import *
    
    root = Tk()
    
    text1 = Text(root,width=30,height=2)
    text1.pack()
    text1.insert(INSERT,'I love you') def show(): print('吆喝,我被点了一下') #text还可以插入按钮 图片等 b1 = Button(text1,text='点我点我',command=show) #在text创建组件的命令 text1.window_create(INSERT,window=b1) mainloop()

     

    3.插入图片之后的Text组件

    from tkinter import *
    
    root = Tk()
    
    text1 = Text(root,width=100,height=30)
    
    text1.pack()
    
    photo = PhotoImage(file='text.gif') def show(): #添加图片用image_create text1.image_create(END,image=photo) b1 = Button(text1,text='点我点我',command=show) #添加插件用window_create text1.window_create(INSERT,window=b1) mainloop()

    4.Text中的Indexes

    Indexes(索引)是用来指向Text组件中文本的位置,跟python的序列索引一样,Text的组件索引也是对应实际字符之间的位置。值得注意的是: 行号以1开始 列号以0开始

    
    from tkinter import *
    root = Tk()
    text1=Text(root,width=30,height=3)
    text1.insert(INSERT,'index的练习') #1.2到1.5的范围之间 print(text1.get(1.2,1.5))

     

    5.Text中的Marks

    Marks(标记)通常是嵌入到Text组件文本中的不可见的对象。事实上,Marks是指定字符间的位置,并跟随相应的字符一起移动。Marks有INSERT,CURRENT,和user-defined marks(用户自定义的Marks), 
    其中,INSERT和CURRENT是Tkinter预定义的特殊Marks,它们是不可能被删除的 
    INSERT(或insert)用于指定当前插入光标的位置,Tkinter会在该位置绘制一个闪烁的光标(因此并不是所有的Marks都不可见) 
    CURRENT用于指定与鼠标坐标坐标最近最接近的位置,不过,如果你按紧鼠标任何一个按钮,它会直到你松开它才响应 
    使用mark_set()方法创建和移动Marks 
    使用mark_unset()方法删除Marks 
    Mark事实上就是索引,用于表示位置

    from tkinter import *
    
    root = Tk()
    
    text1 =Text(root,width=30,height=4)
    
    text1.insert(INSERT,'I Love FishC.com') text1.mark_set('here',1.2) #插入是指在前面插入 text1.insert('here','插') text1.pack() mainloop()

     

    6.Text中的Tags

    Tags通常用于改变Text组件中内容的样式和功能,你可以修改文本的字体,尺寸和颜色,另外Tags还允许你将文本、嵌入的组件和图片与键盘相关联,除了user-defined tags(用户自定义的Tags),还有 
    一个预定义的特殊Tag:SEL

    from tkinter import *
    
    root = Tk()
    
    text1 = Text(root,width=30,height=5)
    text1.pack()
    
    text1.insert(INSERT,'I Love FishC.com!')
    #第一个参数为自定义标签的名字
    #第二个参数为设置的起始位置,第三个参数为结束位置 #第四个参数为另一个位置 text1.tag_add('tag1','1.7','1.12','1.14') #用tag_config函数来设置标签的属性 text1.tag_config('tag1',background='yellow',foreground='red') #新的tag会覆盖旧的tag mainloop()

     

    7.Tags的事件绑定 
    Tags还支持事件的绑定,绑定事件使用的是tag_bind()方法,下面代码实现了将文本与鼠标事件进行绑定,当鼠标进入该文本时,鼠标样式切换为‘arrow’形态,离开文本时切换回‘xterm’形态,当触发鼠标‘左键单击操作’事件的时候,使用默认浏览器打开百度。

    from tkinter import *
    import webbrowser
    
    root = Tk()
    
    text = Text(root,width=30,height=5) text.pack() text.insert(INSERT,"I Love FishC.com!") text.tag_add('link','1.7','1.16') text.tag_config('link',foreground='blue',underline=True) def show_arrow_cursor(event): text.config(cursor='arrow') def show_xterm_cursor(event): text.config(cursor='xterm') def click(event): webbrowser.open('http://baidu.com') text.tag_bind('link','<Enter>',show_arrow_cursor) text.tag_bind('link','<Leave>',show_xterm_cursor) text.tag_bind('link','<Button-1>',click) mainloop()

     

    8.使用Text组件中文本的MD5摘要来判断内容是否发生改变

    from tkinter import *
    import hashlib
    
    root = Tk()
    
    text1 = Text(root,width=30,height=5) text1.pack() text1.insert(INSERT,'I Love FishC.com!') contents = text1.get('1.0',END) def getSig(contents): m=hashlib.md5(contents.encode()) return m.digest() sig=getSig(contents) def check(): contents = text1.get('1.0',END) if sig !=getSig(contents): print('警报,内容发生改变') else: print('风平浪静') Button(root,text="检查",command=check).pack() mainloop()

     

    关于Text的组件的相关内容就先介绍到这里,之后会再进行补充。

    展开全文
  • 无论使用tkinter.PhotoImage还是其他方法,当你向tkinter组件(widgets)添加图片时,你一定要向图片添加一个自定义的引用;否则,图片会无法显示。可以像下面这样这样将组件的属性引用到图片上,其中label.image = ...

    本文参考:Why do my Tkinter images not appear? (archive.org)

    尽管上面引用的文章已经老到被归档了,但它提供的解决方法依然有效

    ——2021.8.8 python 3.7.9

    无论使用tkinter.PhotoImage还是其他方法,当你向tkinter组件(widgets)添加图片时,你一定要向图片添加一个自定义的引用;否则,图片会无法显示。可以像下面这样这样将组件的属性引用到图片上,其中label.image = photo是关键:

    # -*- coding: utf-8 -*-
    """
    Created on Sun Aug  8 21:26:27 2021
    
    @author: Vector341
    """
    import tkinter
    root = tkinter.Tk()
    class TestFrame(tkinter.Frame):
        def __init__(self,master=None,**kw):
            tkinter.Frame.__init__(self,master,**kw)
            self.master = master
            self.showImg()
        def showImg(self):
            photo = tkinter.PhotoImage(file="你的图片路径.png")
            label = tkinter.Label(self.master,image=photo)
            label.image = photo # 添加对图片的引用
            label.pack()
    app = TestFrame(root)
    app.mainloop()
    

    无须mainloop,图片即可显示

    下面是问题发生的原因:来自Why do my Tkinter images not appear? (archive.org)

    The problem is that the Tkinter/Tk interface doesn’t handle references to Image objects properly; the Tk widget will hold a reference to the internal object, but Tkinter does not. When Python’s garbage collector discards the Tkinter object, Tkinter tells Tk to release the image. But since the image is in use by a widget, Tk doesn’t destroy it. Not completely. It just blanks the image, making it completely transparent…

    简单地说,Tkinter/Tk 库没能正确地处理对图片对象的引用,导致Python的垃圾回收机制错误地“回收”了图片对象,导致图片区域显示为空白。

    展开全文
  • 一文讲透 tkinter Canvas 控件 Canvas 绘制对象 Canvas 坐标系 Canvas 展示列表(display list) Canvas 画直线(create_line) Canvas 画矩形(create_rectangle) Canvas 绘制椭圆(create_oval) Canvas 绘制弧...

    本文目录

    《tkinter实用教程十一》tkinter Scrollbar(滚动条)控件
    《tkinter使用教程十》tkinter Listbox控件
    《tkinter实用教程九》tkinter Radiobutton单选控件

    推荐:

    1. 本教程Gitee仓库
    2. tkinter系列教程
    3. Java系列教程

    一文讲透 tkinter Canvas 控件

    Canvas 控件可以管理2D图形对象的集合——线段、圆、文本、图片和其他控件等。

    tkinterCanvas 控件是一个非常灵活、强大的工具,拥有广泛的用途,包括绘制图形、图表、CAD工具、以及构建更复杂的控件。

    Canvas 绘制对象

    Canvas 坐标系

    Canvas 对象的坐标系原点位于左上角,从左上角往右是X轴,往下是Y轴。

    如下图所示:

    tkinter Canvas坐标系示意图

    Canvas 展示列表(display list)

    显示列表是指画布上所有对象的顺序,从背景(显示列表的“底部”)到前景(“顶部”)。

    tkinter 画布显示列表

    如果两个对象重叠,则显示列表中的一个在另一个对象上表示一个更靠近前景的对象,它将出现在重叠区域并遮挡下面的一个。 默认情况下,新对象始终创建在显示列表的顶部(因此位于所有其他对象的前面),但您可以重新排列显示列表。

    Canvas 画直线(create_line)

    tkinterCanvas 对象使用 create_line(x1,y1,x2,y2,x3,...) 方法绘制直线段。

    使用示例如下:

    #!/usr/bin/env python3
    
    """
    魏大王学编程 tkinter 系列教程
    
    The example draws lines on the Canvas.
    
    Author: 魏大王
    Website:www.weidawang.xyz
    """
    
    from tkinter import *
    from tkinter import ttk
    
    root = Tk()
    canvas = Canvas(root,width=400,height=300)
    canvas.create_line(20,30,350,30) # 绘制水平线
    canvas.create_line(20,40,20,250,dash=(4,2))
    canvas.create_line(195,40,40,250,350,250,195,40)
    canvas.grid(column=0,row=0,sticky=(N,W,S,E))
    root.columnconfigure(0,weight=1)
    root.rowconfigure(0,weight=1)
    root.title('tkinter使用Canvas画直线')
    root.mainloop()
    

    以上示例中,我们使用以下代码绘制一条简单的水平直线:

    canvas.create_line(20,30,350,30) # 绘制水平线
    

    create_line 方法的参数是直线两个端点的坐标,以上代码表示绘制一条从点 (20,30) 到点 (350,30) 的直线段。

    我们可以使用 create_line 方法的 dash 参数绘制一条虚线,这条虚线的每一小段包含4个像素实线和2个像素空白。

    canvas.create_line(20,40,20,250,dash=(4,2))
    

    create_line 方法能够接受多个点的坐标,从而绘制一条折线,示例中的以下代码,绘制了一个三角形。

    canvas.create_line(195,40,40,250,350,250,195,40)
    

    代码直线结果如下图所示:

    tkinter Canvas绘制直线

    Canvas 画矩形(create_rectangle)

    Canvas 使用 create_rectangle(x1,y1,x2,y2) 方法创建矩形,以下代码创建了三个填充了不同颜色的矩形。

    #!/usr/bin/env python3
    
    """
    魏大王学编程 tkinter 系列教程
    
    This program draws three rect fill with different colours.
    
    Author: 魏大王
    Website:www.weidawang.xyz
    """
    
    from tkinter import *
    from tkinter import ttk
    
    root = Tk()
    canvas = Canvas(root,width=620,height=220)
    canvas.create_rectangle(20,20,200,200,fill='#FFFFCC',outline='#CCFFFF')
    canvas.create_rectangle(220,20,400,200,fill='#99CCCC',outline='#FFCC99')
    canvas.create_rectangle(420,20,600,200,fill='#CC9966',outline='#666666')
    canvas.grid(column=0,row=0,sticky=(N,W,S,E))
    root.columnconfigure(0,weight=1)
    root.rowconfigure(0,weight=1)
    root.title('tkinter使用Canvas画矩形')
    root.mainloop()
    

    create_rectangle 方法前四个参数,接受两个点的坐标,分别用于确定矩形的左上角和右下角。fill 参数用于指定矩形内部的颜色,outline 参数用于指定矩形边框的颜色。

    如下代码就绘制了一个左上角坐标是 (20,20) ,右下角坐标是 (200,200) 的矩形。使用 #FFFFCC 填充矩形内部,并设置矩形边框颜色是 #CCFFFF

    canvas.create_rectangle(20,20,200,200,fill='#FFFFCC',outline='#CCFFFF')
    

    代码直线结果如下图所示:

    tkinter Canvas绘制矩形

    正方形是矩形的一种特例

    Canvas 绘制椭圆(create_oval)

    tkinter 使用 create_oval(x1,y1,x2,y2) 绘制椭圆,参数传递方式和绘制矩形的 create_rectangle 方法完全相同,表示的是包裹椭圆的矩形(外接矩形)的左上角和右下角坐标,以下代码创建了两个不同颜色填充的椭圆。

    #!/usr/bin/env python3
    
    """
    魏大王学编程 tkinter 系列教程
    
    This program draws two oval fill with different colours.
    
    Author: 魏大王
    Website:www.weidawang.xyz
    """
    
    from tkinter import *
    from tkinter import ttk
    
    root = Tk()
    canvas = Canvas(root,width=620,height=220)
    canvas.create_oval(20,20,200,200,fill='#FFFFCC',outline='#CCFFFF',width=3)
    canvas.create_oval(220,20,600,200,fill='#99CCCC',outline='#FFCC99')
    canvas.create_rectangle(220,20,600,200,outline='#FFCC99')
    canvas.grid(column=0,row=0,sticky=(N,W,S,E))
    root.columnconfigure(0,weight=1)
    root.rowconfigure(0,weight=1)
    root.title('tkinter使用Canvas画矩形')
    root.mainloop()
    

    create_oval 方法的前四个参数表示的是椭圆外接矩形的左上角和右下角坐标,以下代码表示绘制一个左上角坐标 (220,20) ,右下角坐标 (600,200)矩形内接椭圆

    canvas.create_oval(220,20,600,200,fill='#99CCCC',outline='#FFCC99')
    

    width 参数可以指定椭圆的边框宽度。

    圆是椭圆的一种特例,属于正方形的内接椭圆。

    以上代码直线结果如下图所示:
    tkinter Canvas绘制椭圆

    Canvas 绘制弧(create_arc)

    Canvas 使用 create_arc 绘制弧线,以下代码绘制了三种不同类型的弧线。

    #!/usr/bin/env python3
    
    """
    魏大王学编程 tkinter 系列教程
    
    本示例绘制三种不同样式的弧线。
    
    Author: 魏大王
    Website:www.weidawang.xyz
    """
    
    from tkinter import *
    from tkinter import ttk
    
    root = Tk()
    canvas = Canvas(root,width=620,height=620)
    canvas.create_arc(20,20,200,200,fill='#FFFFCC',outline='#009966',start=0,extent=135,style=PIESLICE)
    canvas.create_arc(220,20,400,200,fill='#99CCCC',outline='#336699',start=45,extent=90,style=PIESLICE)
    canvas.create_arc(420,20,600,200,fill='#CC9966',outline='#663300',start=135,extent=180,style=PIESLICE)
    canvas.create_arc(20,220,200,400,fill='#FFFFCC',outline='#009966',start=0,extent=135,style=ARC)
    canvas.create_arc(220,220,400,400,fill='#99CCCC',outline='#336699',start=45,extent=90,style=ARC)
    canvas.create_arc(420,220,600,400,fill='#CC9966',outline='#663300',start=135,extent=180,style=ARC)
    canvas.create_arc(20,420,200,600,fill='#FFFFCC',outline='#009966',start=0,extent=135,style=CHORD)
    canvas.create_arc(220,420,400,600,fill='#99CCCC',outline='#336699',start=45,extent=90,style=CHORD)
    canvas.create_arc(420,420,600,600,fill='#CC9966',outline='#663300',start=135,extent=180,style=CHORD)
    canvas.grid(column=0,row=0,sticky=(N,W,S,E))
    root.columnconfigure(0,weight=1)
    root.rowconfigure(0,weight=1)
    root.title('tkinter使用Canvas画弧形')
    root.mainloop()
    

    我们首先要知道的概念是弧是椭圆边框的一部分Canvas 绘制的弧线是从椭圆上截取的一部分。因此绘制弧线需要指定弧线所属的椭圆,同时要指定弧线的开始角度和跨度。

    以下代码指定弧线,取自外接矩形为[(220,220),(400,400)]的椭圆,起始角度为45°,弧线跨度为90°。

    canvas.create_arc(220,220,400,400,fill='#99CCCC',outline='#336699',start=45,extent=90,style=ARC)
    

    style 参数可以指定所画弧线的样式,弧线有三种样式,具体样式请看下图代码执行结果。

    代码执行结果:

    tkinter Canvas绘制弧形

    Canvas 绘制文本(create_text)

    Canvas 使用 create_text 方法在画布上绘制一个文本块,定位文本的方法和定位图片一样,传入文本块的中点坐标。

    使用 text 参数指定绘制的文本内容;使用 fill 参数指定所有文本颜色;使用 font 参数指定文本字体。

    示例代码如下:

    #!/usr/bin/env python3
    from tkinter import ttk
    from tkinter import *
    txt = """
    魏大王学编程 tkinter 系列教程
    本示例用于展示在Canvas上绘制文本
    Author: 魏大王
    Website:www.weidawang.xyz
    """
    
    root = Tk()
    canvas = Canvas(root, width=320, height=320)
    canvas.create_text(150, 50, text=txt,font="TKMenuFont", fill="#ff8000")
    canvas.create_text(150, 120, text=txt,font="TKMenuFont", fill="#3D7878",justify=RIGHT)
    canvas.create_text(150, 250, text=txt,font="TKMenuFont", fill="#930000",justify=CENTER,width=100)
    canvas.grid(column=0, row=0, sticky=(N, W, S, E))
    root.columnconfigure(0, weight=1)
    root.rowconfigure(0, weight=1)
    root.title('tkinter使用Canvas画弧形')
    root.mainloop()
    

    text 传入的文本如果是多行文本(包含\n),就可以一次绘制多行文本。

    justify 参数可以指定多行文本的对齐方向,默认选择 LEFT,还可以选择 RIGHT 或者 CENTER

    width 参数可以指定一行文本占据的最大宽度,如果单行文本较长,自动折叠到下一行。

    以下代码可以创建多行居中对齐,宽度为100的多行折叠文本。

    canvas.create_text(150, 250, text=txt,font="TKMenuFont", fill="#930000",justify=CENTER,width=100)
    

    代码执行结果如下图:

    tkinter Canvas绘制文本

    Canvas 绘制图片(create_image)

    Canvas 使用 create_image 方法绘制图片。

    使用示例如下:

    #!/usr/bin/env python3
    
    """
    魏大王学编程 tkinter 系列教程
    
    本示例用于展示 Canvas 绘制图片的方法
    
    Author: 魏大王
    Website:www.weidawang.xyz
    """
    
    from tkinter import *
    from tkinter import ttk
    
    root = Tk()
    canvas = Canvas(root,width=220,height=220)
    image = PhotoImage(file="icon.png")
    canvas.create_image(10,10,image=image,anchor='nw')
    canvas.grid(column=0,row=0,sticky=(N,W,S,E))
    root.columnconfigure(0,weight=1)
    root.rowconfigure(0,weight=1)
    root.title('tkinter使用Canvas画图片')
    root.mainloop()
    

    代码执行结果:

    tkinter Canvas绘制图片

    Canvas 控制对象

    对象ID(object-id)

    画布上对象的 object-id 是该对象构造函数返回的值。

    所有 object-id 值都是正整数,并且对象的 object-id 在该画布中是唯一的。

    对象标签(tags)

    标签(tag)是可以与画布上的对象关联的字符串,类似于 HTML 语言中的 class

    • 一个标签可以与画布上任意数量的对象相关联。
    • 一个对象可以有任意数量的关联标签,也可以没有标签。

    标签有很多用途。 例如,如果我们在画布上绘制森林,森林里有很多树,我们可以将标签 “tree” 附加到所有树对象上。 这样我们就可以通过标签统一处理这些树对象,例如更改它们的颜色或删除它们。

    以下代码展示如何添加标签:

    #!/usr/bin/env python3
    
    """
    魏大王学编程 tkinter 系列教程
    
    本示例用于演示 Canvas 在创建对象时添加 tag 的方法
    
    Author: 魏大王
    Website:www.weidawang.xyz
    """
    
    id1 = canvas.create_rectangle((10, 10, 30, 30), tags=('class1', 'class2'))
    id2 = canvas.create_rectangle((10, 35, 30, 55), tags=('class1', 'class2'))
    id3 = canvas.create_rectangle((10, 60, 30, 80), tags=('class1', 'class2', 'class3'))
    

    tagOrId 参数的含义

    在后文要介绍的 Canvas 控制对象方法中,会多次出现 tagOrId 参数。

    tagOrId 用于指示 Canvas 上的一个或者多个对象,存在两种情况:

    • 如果传入一个正整数tagOrId 会被当做 object-id 使用。
    • 如果传入一个字符串tagOrId 会被当做 tag 使用。

    控制 Canvas 中控件的方法(必看、超细)

    Canvas 中所有的对象都支持以下方法:

    1. addtag_all(newTag)

    Canvas 中所有对象添加一个新的标签 newTag

    1. addtag_above(newTag, tagOrId)

    展示列表(display list)中,所有位于 tagOrId 指定对象上方的对象,添加一个新的标签 newTag

    1. addtag_below(newTag, tagOrId)

    展示列表(display list)中,所有位于 tagOrId 指定对象下方的对象,添加一个新的标签 newTag

    1. addtag_closest(newTag, x, y, halo=None, start=None)

    Canvas 坐标系中,距离点 (x, y) 最近的对象添加新标签 newTag。如果存在两个或者更多对象满足要求,取展示列表(display list)中最上层的对象。

    halo 参数用于指定点 (x, y) 的有效大小,如果我们指定 halo = 3,那么点 (x, y) 3个像素内的所有对象都看作是距离相同的。

    使用 start 参数传入一个 object-id,方法就会返回展示列表(display list)中,低于 start 的,最高位置的合格对象。

    1. addtag_enclosed(newTag, x1, y1, x2, y2)

    完全处于矩形区域中的所有对象,添加新标签 newTag,这个矩形区域的左上角是点 (x1, y1),右下角是 (x2, y2)

    1. addtag_overlapping(newTag, x1, y1, x2, y2)

    对所有和矩形区域有重叠的对象,添加新标签 newTag,即使只有一个像素重叠,矩形区域的左上角是点 (x1, y1),右下角是 (x2, y2)

    1. addtag_withtag(newTag, tagOrId)

    tagOrId 指定的对象,添加新标签 newTag

    1. bbox(tagOrId=None)

    返回一个 tuple (x1, y1, x2, y2),用于指定一个矩形区域,这个矩形区域包含所有通过 tagOrId 指定的对象。如果 tagOrId 被省略,返回一个包含 Canvas 所有对象的矩形区域。矩形区域的左上角是 (x1, y1),右下角是 (x2, y2)

    1. canvasx(screenx, gridspacing=None)

    将窗口 x 坐标 screenx 转换为画布坐标。 如果提供了 gridspacing,则画布坐标将四舍五入为该值的最接近的倍数。

    1. canvasy(screeny, gridspacing=None)

    将窗口 y 坐标 screeny 转换为画布坐标。 如果提供了 gridspacing,则画布坐标将四舍五入为该值的最接近倍数。

    1. coords(tagOrId, x0, y0, x1, y1,...,xn, yn)

    如果仅传递 tagOrId 参数,则返回该 tagOrId 指定的最低或唯一对象的坐标元组。 坐标的数量取决于对象的类型。 在大多数情况下,它将是一个描述对象边界框的 4 元组 (x1, y1, x2, y2)

    还可以通过传入新坐标 (x0,y0,...) 来移动 tagOrId 指定的对象。

    1. dchars(tagOrId, first=0, last=first)

    从一个或多个文本对象中删除字符。 删除 firstlast 之间的字符,其中这些值可以是整数索引或字符串 'end' 表示文本的结尾。 例如,对于画布 C 和对象 IC.dchars(I, 1, 1) 将删除第二个字符。

    1. delete(tagOrId)

    删除由 tagOrId 选择的一个或多个对象。 如果没有与 tagOrId 匹配的项目,也不会被视为错误。

    1. dtag(tagOrId, tagToDelete)

    tagOrId 指定的一个或多个对象中移除 tagToDelete 指定的标签。

    1. find_above(tagOrId)

    返回由 tagOrId 指定的对象正上方的对象的 ID 号。 如果多个对象匹配,您将获得最高的一个。 如果将最高对象的对象 ID 传递给它,则返回一个空元组。

    1. find_all()

    返回画布上所有对象的对象 ID 编号列表,从最低到最高。

    1. find_below(tagOrId)

    返回由 tagOrId 指定的对象的对象 ID。 如果多个对象匹配,您将获得最低的一个。 如果将最低对象的对象 ID 传递给它,则返回一个空元组。

    1. find_closest(x, y, halo=None, start=None)

    返回一个包含最接近点 (x, y) 的对象的对象 ID 的单例元组。 如果没有符合条件的对象,则返回一个空元组。

    使用 halo 参数来增加点的有效大小。 例如,halo=5 会将 (x, y) 的 5 个像素内的任何对象视为重叠。

    如果对象 ID 作为 start 参数传递,则此方法返回显示列表中低于 start 的最高合格对象。

    1. find_enclosed(x1, y1, x2, y2)

    返回完全出现在左上角为 (x1, y1) 右下角为 (x2, y2) 的矩形内的所有对象的对象 ID 列表。

    1. find_overlapping(x1, y1, x2, y2)

    与前一种方法类似,但返回与给定矩形至少重叠一个点的所有对象的对象 ID 列表。

    1. find_withtag(tagOrId)

    返回由 tagOrId 指定的一个或多个对象的对象 ID 列表。

    1. focus(tagOrId=None)

    将焦点移动到由 tagOrId 指定的对象。 如果有多个这样的对象,将焦点移到显示列表中允许插入光标的第一个。 如果没有符合条件的项目,或者画布没有焦点,则焦点不会移动。

    如果省略参数,则返回具有焦点的对象的 ID,如果没有,则返回 ''

    1. gettags(tagOrId)

    如果 tagOrId 是对象 ID,则返回与该对象关联的所有标签的列表。 如果参数是标签,则返回具有该标签的最低对象的所有标签。

    1. icursor(tagOrId, index)

    假设所选项目允许文本插入并具有焦点,将插入光标设置为 index,它可以是整数索引或字符串 'end'。 否则没有任何影响。

    1. index(tagOrId, specifier)

    返回由 tagOrId 指定的文本对象中给定 specifier 的整数索引(如果 tagOrId 指定多个对象,则是最低的一个)。返回值是作为整数的相应位置,按照通常的 Python 约定,其中 0 是第一个字符之前的位置。

    说明符参数可以是以下任何一项:

    tk.INSERT,返回插入光标的当前位置。

    tk.END,返回项目最后一个字符后的位置。

    tk.SEL_FIRST,返回当前文本选择的开始位置。如果文本项当前不包含文本选择,Tkinter 将引发 tk.TclError 异常。

    tk.SEL_LAST,返回当前文本选择结束后的位置,或者如果项目当前不包含选择,则引发 tk.TclError

    形式为 “@x,y” 的字符串,用于返回包含画布坐标 (x, y) 的字符的字符。如果这些坐标位于文本项的上方或左侧,则该方法返回 0;如果坐标在项目的右侧或下方,则该方法返回项目末尾的索引。

    还有一部分方法没有更新出来,肝不动了,回复1可催更。

    更多tkinter教程:
    《tkinter实用教程十一》tkinter Scrollbar(滚动条)控件
    《tkinter使用教程十》tkinter Listbox控件
    《tkinter实用教程九》tkinter Radiobutton单选控件

    展开全文
  • Tkinter-Text控件常用功能示例

    千次阅读 2018-07-24 08:16:05
    Tkinter 的 Text 控件很强大, 很灵活, 可以实现很多功能. 虽然这个控件的主要用途是显示多行文本, 但其还可以被用作简单的文本编辑器, 甚至是网页浏览器.  Text 控件可以显示网页链接, 图片, HTML页面, 甚至 CSS ...
  • 本文实例展示了Python Tkinter基础控件的用法,分享给大家供大家参考之用。具体方法如下:# -*- coding: utf-8 -*-from Tkinter import *def btn_click():b2['text'] = 'clicked'evalue = e.get()print 'btn Click ...
  • Panedwindow 是一个管理窗口布局的容器,它允许添加多个子组件(不需要使用 Pack、Grid 或 Place 布局)并为每个子组件划分一个...ttk.Panedwindow 继承了 tkinter.PanedWindow,为了让 ttk.Panedwindow 与 tkinter.P...
  • 用来显示文字或图片 7.Listbox 列表框。一个选项列表,用户可以从中选择 8.Menu 菜单。点下菜单按钮后弹出的一个选项列表,用户可以从中选择 9.Menubutton 菜单按钮。用来包含菜单的组件(有下拉式、层叠式等等) 10....
  • Tkinter控件加载图片

    千次阅读 2017-02-03 19:08:24
    img = PhotoImage(file=’./img/1.gif’) print imgButton(root, command = p, image = img).pack() Label(root, image = img).pack()
  • python tkinter控件属性 全

    千次阅读 2015-08-12 10:22:00
    用来显示文字或图片 7.Listbox 列表框。一个选项列表,用户可以从中选择 8.Menu 菜单。点下菜单按钮后弹出的一个选项列表,用户可以从中选择 9.Menubutton 菜单按钮。用来包含菜单的组件(有下拉式、层叠式...
  • tkinter控件的布局方式

    2021-02-03 03:38:31
    tkinter中控件布局的方法主要有三种:(1)pack布局(2)grid布局(3)place布局pack布局采用块的方式组织控件,pack(options,......),options参数可以选择:side、fill、padx/pady、anchor等。21-设置三个标签,使用...
  • 使用Text控件、Scrollbar控件实现一个阅读新闻的窗口 实现代码如下: import tkinter as tk from PIL import Image, ImageTk root = tk.Tk() # 设置窗口标题 root.title('新闻阅读') # 设置窗口宽度600 高度500...
  • tkinter实线图片拖动

    2018-04-21 15:03:06
    个人编写的小程序,实现拓片在GUI的拖动,十分盈动好用
  • 文章目录简介place 方法 简介 在设计GUI程序时,可以使用三种方法包装和定位各组件在容器或窗口内的...这三种方法又称窗口控件配置管理员(Widget Layout Manager) pack 方法 grid 方法 place 方法 place 方法 ...
  • Python GUI编程—Tkinter的常用控件

    千次阅读 2019-03-26 21:47:29
    Python提供了多个GUI库,常用的有Tkinter,wxPython以及Jython,其中Tkinter模块儿(TK接口)是Python标准TK GUI工具包的接口,这里只介绍Tkinter模块儿,注:Python2.7ttk是直接导入的,ttk是自己的包,Python3.x版...
  • tkinter中ttk控件的width-height设置

    千次阅读 2020-07-13 17:31:13
    tkinter中窗口,框架容器,控件如果不设置宽度高度,则会根据其中的内容自动设置宽度高度 如果窗口,框架容器,控件中没有内容,宽度和高度为默认的最小尺寸(可能看不到) 顶级窗口: import tkinter as tk ...
  • 三、tkinter常见控件的特征属性 3.1 文本输入和输出相关控件 3.1.1 标签(Label)和 消息(Message) 文本的输入与输出控件通常包括:标签(Label)、消息(Message)、输入框(Entry)、文本框(Text)。他们除了...
  • 【Python】图形交互界面GUI之tkinter各大控件详解

    千次阅读 多人点赞 2019-06-18 10:15:35
    from tkinter import * window = Tk()#创建一个窗口 window.title('第一个窗体')#添加标题
  • python Tkinter 15种控件简介

    万次阅读 2018-06-30 11:05:58
    用来显示文字或图片 7.Listbox 列表框。一个选项列表,用户可以从中选择 8.Menu 菜单。点下菜单按钮后弹出的一个选项列表,用户可以从中选择 9.Menubutton 菜单按钮。用来包含菜单的组件(有下拉式、层叠式等等) 10....
  • Python Tkinter 之Text控件(Python GUI 系列15) 1. 序言 本章介绍Tkinter的Text控件,本文是Python GUI系列的第15篇文章,整个系统约20篇博客,将全面的介绍Python Tkinter常用控件,最后还将基于Tkinter搭建两...
  • Tkinter 控件详细介绍

    万次阅读 2015-07-18 12:58:29
    python 界面编程 Tkinter 15种控件简介  2012-02-21 16:23:47| 分类: python代码 | 标签: |字号大中小 订阅 1.Button 按钮。类似标签,但提供额外的功能,例如鼠标掠过、按下、释放以及键盘操作/...
  • 通过按键绑定事件,选择文件路径,经过OpenCV读取之后在Tkinter中显示 ''' @Author: your name @Date: 2020-02-12 15:38:22 @LastEditTime : 2020-02-13 10:39:31 @LastEditors : Please set LastEditors @...
  • [Tkinter 教程10] Text 控件

    万次阅读 2017-03-07 22:25:53
    Tkinter 的 Text 控件很强大, 很灵活, 可以实现很多功能. 虽然这个控件的主要用途是显示多行文本, 但其还可以被用作简单的文本编辑器, 甚至是网页浏览器. Text 控件可以显示网页链接, 图片, HTML页面, 甚至 CSS ...
  • python界面Tkinter编程(基本控件介绍及使用)

    万次阅读 多人点赞 2018-04-27 10:50:23
    1. 前言 在上一篇博客中已经讲解了Tkinter的基础知识,为了设计自己的程序界面就需要进一步了解...在Tkinter控件的使用都是基于如下的形式的:控件类型(根对象, [属性列表]),在控件定义好之后就需要将其添加到...
  • tkinter控件属性大全

    千次阅读 2018-09-17 08:50:02
    用来显示文字或图片  7.Listbox 列表框。一个选项列表,用户可以从中选择  8.Menu 菜单。点下菜单按钮后弹出的一个选项列表,用户可以从中选择  9.Menubutton 菜单按钮。用来包含菜单的组件(有下拉式、层叠式...
  • 1、使用tkinter.Tk() 生成主窗口(window=tkinter.Tk()): window.title('标题名') 修改框体的名字,也可在创建时使用className参数来命名; window.resizable(0,0) 框体大小可调性,分别表示x,y方向的可...
  • 我是展示了一张图片,想通过其他线程在完成操作后,来删掉这个图片。 搜索了很多文章,最接近的是提及text的删除,但对于整个控件label的删除,居然没人回答过!在官网文档中也未提及,大家都不删除控件吗? ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,009
精华内容 803
关键字:

tkinter图片控件