pack移除 python tk_python tk pack - CSDN
精华内容
参与话题
  • 我想问一下,我在tkinter中添加了一个label,现在想删除或者...filename = 'D:\\python34\\1.png' img = tk.PhotoImage(file = filename) label = tk.Label(top, image=img) label.pack() top.mainloop() ```
  • Python3 tkinter删除指定控件

    万次阅读 2018-11-30 14:21:43
    用tkinter的界面,pack布局,使用pack_forget()卸载控件 删除控件类似的还有grid_forget(),grid_remove() ,grab_release(),place_forget(), 如果想销毁控件,不在创建该控件的话可以用destroy() * 下拉框:选择...

    用tkinter的界面,pack布局,使用pack_forget()卸载控件

    删除控件类似的还有grid_forget(),grid_remove()grab_release(),place_forget(),
    如果想销毁控件,不在创建该控件的话可以用destroy()
    在这里插入图片描述
    *

    下拉框:选择exe并执行(这里没写) Open:删除Upgrade创建的文本框,选择exe文件并执行 Cancel : 退出程序 Upgrade:加载文本框,执行一些需要提示的程序

    #-*- coding:utf-8 -*-
    from os import path
    from subprocess import Popen, PIPE
    from tkinter import *
    from tkinter import ttk  
    from tkinter.filedialog import askopenfilename
    
    def Upgrade():
        fm2.pack(expand=YES)
    def Openf():
        # fm2.destroy()
        fm2.pack_forget()  #删除fm2
        if True == path.exists('C:\\Program Files (x86)\\'):
            initdir='C:\\Program Files (x86)\\'
        else:
            initdir='C:\\Program Files\\'
        file_path=askopenfilename(title='Select the diagnostic instrument .exe file', filetypes=[('EXE', '*.exe'), ('All Files', '*')],initialdir=initdir)  #打开文件选择框
        Popen(file_path, shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE)  #新建管道,执行exe文件
    if __name__ == '__main__':
        root = Tk()
        root.title('FileDown')
        #root.iconbitmap('i.ico')
        #root.resizable(0,0)
        mw, mh = root.maxsize()
        root.geometry('360x150+%d+%d'%((mw-360)/2,(mh-150)/2))  #窗口居中
    
        # 创建一个下拉列表
        # number = StringVar()#窗体自带的文本,新建一个值
        numberChosen = ttk.Combobox(root, width=40)
        comboxlist = ['1', '2', '3']
        numberChosen['values'] = comboxlist  # 设置下拉列表的值
        numberChosen.pack(side=TOP, expand=YES)  # 设置其在界面中出现的位置
        numberChosen["state"] = "readonly"
        numberChosen.set("Please choose diagnostic instrument")
        numberChosen.bind("<<ComboboxSelected>>")  # 绑定事件
    
        fm1=Frame(root)
    
    
        OpenB = Button(fm1, text="Open", fg= 'green',activeforeground='yellow',command=Openf).pack(side=LEFT,expand=YES)  #创建按钮
        CancelB = Button(fm1, text="Cancel", fg='green', activeforeground='yellow',command=root.quit) .pack(side=LEFT,expand=YES) # 创建按钮
        UpgradeB = Button(fm1, text="Upgrade", fg='green', activeforeground='yellow',command=Upgrade) .pack(side=LEFT,expand=YES) # 创建按钮
        #B.pack()
        fm1.pack(ipadx=20,expand=YES)
    
        fm2 = Frame(root)
    
        t=Text(fm2,state='normal')
        t.focus_set()
        s = Scrollbar(fm2)
        s.pack(side=RIGHT, fill=Y) #设置滚动条
        t.pack(side=RIGHT,fill=Y)
        s.config(command=t.yview)
        t.config(yscrollcommand=s.set)
        #fm2.pack()
        root.update()
        root.mainloop()
    
    展开全文
  • 第3章 tkinter 3.1 第一个tkinter程序 tkinter的程序很容易编写。难点是在后面的布局以及参数的...root = tkinter.Tk() root.mainloop() 结果: 只用三行程序就可以构建一个窗口程序,的确非常简单。不过这个程序没...

    第3章 tkinter
    3.1 第一个tkinter程序
    tkinter的程序很容易编写。难点是在后面的布局以及参数的传递。很多控件(Widget)的使用方法都可以从网络上快速的找到。
    简单的tkinter窗口程序如下:

    import tkinter
    root = tkinter.Tk()
    root.mainloop()
    

    结果:
    在这里插入图片描述
    只用三行程序就可以构建一个窗口程序,的确非常简单。不过这个程序没有大的用处。整个窗口也是空白的。我们会在后面的章节里面加入其他的控件,让这个窗口具有更多的功能。

    详细解读一下上面的程序:
    (1)Import tkinter 是引入tkinter模块。所有的控件(Widget)都在里面有定义。
    (2)root = tkinter.Tk() 是实例化Tk类。Tk类是顶层的控件类,完成窗口的一系列初始化。有兴趣的可以看tkinter类的__init__.py,看看Tk是如何完成初始化的。
    (3)root.mainloop() 是主窗口循环。
    3.2 窗口的基本属性
    空白的窗口没有什么用处,这节会介绍一些关于窗口的基本属性与功能。
    3.2.1 窗口标题
    给窗口加一个标题,表明这个窗口是做什么的。一般都是显示程序的名称。或者动态的提示消息,比如打开的文件名称等。
    添加标题的语句是:

    root.title('Hello')
    

    把这条语句加在mainloop()之前就可以了。
    在这里插入图片描述
    3.2.2 设置窗口的大小
    初始化的窗口,是一个很小的窗口,连标题都无法正常显示。因此需要在程序开始的时候设置窗口的大小。
    窗口有4个与大小有关的函数:

    函数 说明 备注
    winfo_screenwidth() 整个屏幕宽度 是电脑屏幕的宽度
    winfo_screenheight() 整个屏幕长度 是电脑屏幕的长度
    winfo_reqwidth() 窗口宽度
    winfo_reqheight() 窗口长度

    有了这4个函数,我们就可以轻松的实现窗口大小的调整与在屏幕中间显示。如果没有调整的话,我们创建的tkinter窗口出现在屏幕的位置,每次都是不同的。下面的程序就可以实现调整窗口大小,并在屏幕居中显示:

    import tkinter  as tk
    def get_screen_size(win):
        return win.winfo_screenwidth(),win.winfo_screenheight()
    def center_window(root, width, height):
        screenwidth = root.winfo_screenwidth()
        screenheight = root.winfo_screenheight()
        size = '%dx%d+%d+%d' % (width, height, (screenwidth - width)/2, (screenheight - height)/2)
        root.geometry(size)
    root = tk.Tk()
    root.title('调整窗口大小')
    center_window(root, 400, 320)
    root.mainloop()
    

    结果:
    在这里插入图片描述
    要设置窗口的大小与位置,先得到屏幕的大小,然后根据要设定的窗口大小,确定窗口右上角在屏幕上的位置。就是(屏幕的宽度-窗口的宽度)/2和(屏幕的长度-窗口的长度)/2)。然后把这些参数合成一个字符串传入geometry函数,就可以在指定的位置显示指定大小的窗口了。

    函数 说明 备注
    geometry(string) 传入宽度、高度、左上角在屏幕的相对位置 是个字符w*h+/-x+/-y
    minsize(x,y) 最小的窗口尺寸。窗口不会比这个更小。
    maxsize(x,y) 最大窗口尺寸。窗口不会比这个更大

    3.2.3 窗口内控件的布局
    有了窗口就可以在上面放置控件了。控件会在以后的章节中详细说明。本章中,先使用标签控件(Label)来说明布局。所有控件的布局都是继承于同一样的类,所以布局的处理是完全一样。
    tkinter 有三种布局模式,pack,grid和place。pack最简单,grid最常用,place用的最少。
    3.2.3.1 pack
    pack布局非常简单,不用做过多的设置,直接使用一个 pack 函数就可以了。pack方法会从上到下,从左到右的摆放控件。当然也可以指定控件的位置来实现指定的效果,比如让退出按钮在右下角等。
    3.2.3.1.1 pack 选项
    pack可以使用的选项包括:

    名称 描述 取值范围
    expand 当值为True时,side选项无效。控件显示在父控件中心位置;若fill选项为”both”,则充满父控件的空间。 “yes”,”no”,”y”,”n” 自然数,浮点数 “no”, 0,True,False (默认值为“no”或0)
    fill 填充x(y)方向上的空间,当属性side=”top”或”bottom”时,填充x方向;当属性side=”left”或”right”时,填充”y”方向;当expand选项为”yes”时,填充父控件的剩余空间。 “x”, “y”, “both”
    ipadx, ipady 控件内部在x(y)方向上间距,默认单位为像素,可选单位为c(厘米)、m(毫米)、i(英寸)、p(打印机的点,即1/27英寸),用法为在值后加以上一个后缀既可。 非负浮点数(默认值为0.0)
    padx, pady 控件外部在x(y)方向上的间距,默认单位为像素,可选单位为c(厘米)、m(毫米)、i(英寸)、p(打印机的点,即1/27英寸),用法为在值后加以上一个后缀既可。 非负浮点数(默认值为0.0)
    side 定义控件贴近在父控件的哪一边上。 “top”, “bottom”, “left”, “right”(默认为”top”)
    before 将本控件于所选组建对象之前pack,类似于先创建本控件再创建其他控件。 已经pack后的控件对象
    after 将本控件于所选组建对象之后pack,类似于先创建选定控件再本控件。 已经pack后的控件对象
    in_ 将本控件作为所选组建对象的子控件,类似于指定本控件的master为选定控件。 已经pack后的控件对象
    anchor 控件的摆放方式。默认是居中。左对齐”w”,右对齐”e”,顶对齐”n”,底对齐”s”。w 和e可以与n和s组合使用 “n”, “s”, “w”, “e”, “nw”, “sw”, “se”, “ne”, “center”(默认为” center”)

    首先这段代码创建一个窗口和一个标签。正常的情况使用pack,此标签就在窗口的顶部居中显示(为了突出显示效果,加上了蓝色的背景)。

    import tkinter as tk
    root=tk.Tk()
    root.geometry('300x240')
    L = tk.Label(root,text='这是一个标签',bg='blue')
    l.pack()
    root.mainloop()
    

    在这里插入图片描述

    • expand 的使用

    修改pack()函数,设置expand=’yes’,可以发现标签选择不仅是左右居中,同时还是垂直居中了。

    import tkinter as tk
    root=tk.Tk()
    root.geometry('300x240')
    l = tk.Label(root,text='这是一个标签',bg='blue')
    l.pack(expand='yes')
    root.mainloop()
    

    结果:
    在这里插入图片描述

    • fill的使用

    fill的作用是选择如何填充父控件:
    fill = ‘x’: 表示在水平方向充满整个父控件
    fill = ‘y’: 表示在垂直方向充满整个父控件
    fill = ‘both’:表示充满整个父控件

    #fill=x
    import tkinter as tk
    root=tk.Tk()
    root.geometry('300x240')
    l = tk.Label(root,text='这是一个标签',bg='blue')
    l.pack(expand='true',fill='x')
    root.mainloop()	
    

    结果:
    在这里插入图片描述

    #fill=y
    import tkinter as tk
    root=tk.Tk()
    root.geometry('300x240')
    l = tk.Label(root,text='这是一个标签',bg='blue')
    l.pack(expand='true',fill='y')
    root.mainloop()
    

    结果:
    在这里插入图片描述

    #fill=both
    import tkinter as tk
    root=tk.Tk()
    root.geometry('300x240')
    l = tk.Label(root,text='这是一个标签',bg='blue')
    l.pack(expand='true',fill='both')
    root.mainloop()	
    

    结果:
    在这里插入图片描述
    这是只有一个控件的情况。如果有两个控件,会是什么样的结果呢?

    import tkinter as tk
    root=tk.Tk()
    root.geometry('300x240')
    r = tk.Label(root,text='一个红色的标签',bg='red')
    b = tk.Label(root,text='一个蓝色标签',bg='blue')
    r.pack(expand='true')
    b.pack(expand='true',fill='both')
    root.mainloop()
    

    结果:
    在这里插入图片描述
    可以看见,两个标签上下平分了窗口。不过有fill选项的会充满下半个窗口,为没有fill选项的,只是在上半个窗口居中显示。
    如果上半个窗口没有开启expand选项,那么红色的标签只是在顶端居中显示,剩下的空间由蓝色标签充满。

    import tkinter as tk
    root=tk.Tk()
    root.geometry('300x240')
    r = tk.Label(root,text='一个红色的标签',bg='red')
    b = tk.Label(root,text='一个蓝色标签',bg='blue')
    r.pack()
    b.pack(expand='true',fill='both')
    root.mainloop()
    

    结果:
    在这里插入图片描述

    • side的作用

    side的作用是放置控件的位置。有四个位置:left,right,top,bottom。可以输入字符串,也可以使用tkinter模块中的常量LEFT,RIGHT,TOP,BOTTOM。

    import tkinter as tk
    root=tk.Tk()
    root.geometry('300x240')
    b1 = tk.Label(root,text='left')
    b1.pack(side=tk.LEFT)
    b2 = tk.Label(root,text='right')
    b2.pack(side=tk.RIGHT)
    b3 = tk.Label(root,text='top')
    b3.pack(side=tk.TOP)
    b4 = tk.Label(root,text='bottom')
    b4.pack(side=tk.BOTTOM)
    root.mainloop()
    

    结果
    在这里插入图片描述

    • anchor的作用

    主要作用是如何摆放控件。如果没有指定anchor选项,控件是在父窗口中自顶向下摆放的。anchor一共有八个选项,其实就是我们通常意义上的八个方位。

    import tkinter as tk
    root=tk.Tk()
    root.geometry('300x240')
    b1 = tk.Label(root,text='1:anochor=\'e\'')
    b1.pack(anchor='e')
    b2 = tk.Label(root,text='2:anochor=\'w\'')
    b2.pack(anchor='w')
    b3 = tk.Label(root,text='3:anochor=\'n\'')
    b3.pack(anchor='n')
    b4 = tk.Label(root,text='4:anochor=\'s\'')
    b4.pack(anchor='s')
    b5 = tk.Label(root,text='5:anochor=\'ne\'')
    b5.pack(anchor='ne')
    b6 = tk.Label(root,text='6:anochor=\'se\'')
    b6.pack(anchor='se')
    b7 = tk.Label(root,text='7:anochor=\'nw\'')
    b7.pack(anchor='nw')
    b8 = tk.Label(root,text='8:anochor=\'sw\'')
    b8.pack(anchor='sw')
    root.mainloop()
    

    结果:
    在这里插入图片描述
    anchor和side的作用都是用来定位控件位置的。可以组合起来使用。

    • ipadx 和 ipady的使用

    ipadx 和 ipady 是内部填充空间的大小。什么意思呢?就是把控件往外扩大的空间。比如控件的宽和长是30 和20。那么使用ipadx和ipady之后,控件的宽和长就是30+ipadx和20+ipady。

    import tkinter as tk
    root=tk.Tk()
    root.geometry('300x240')
    r = tk.Label(root,bg='red')
    r.pack(expand='true',fill='both')
    b = tk.Label(r,text='一个蓝色标签',bg='blue')
    b.pack(expand='true',ipadx=10,ipady=20)
    b2 = tk.Label(r,text='一个蓝色标签',bg='blue')
    b2.pack(expand='true')
    root.mainloop()
    

    结果:
    在这里插入图片描述
    下面的蓝色标签是对照的。可以看见在x和y的方向上,上面的蓝色标签都扩大了。增加的就是ipadx和ipady。有关单位的描述见上面的表格。一般都是使用默认的单位:像素。

    • padx 和pady的使用

    padx和pady是外部间隔,也就是两个控件之间的间隔。

    padx就是x方向的间距。参数可以是自然数,也可以是自然数的元组,分别表示左边和右边的间隔。
    这段代码是自然数的情况(文本3与文本2和4的间隔是30个像素):

    import tkinter as tk
    root=tk.Tk()
    root.geometry('300x240')
    b1 = tk.Label(root,text='文本1')
    b1.pack(side='left')
    b2 = tk.Label(root,text='文本2')
    b2.pack(side='left')
    b3 = tk.Label(root,text='文本3')
    b3.pack(side='left',padx=30)
    b4 = tk.Label(root,text='文本4')
    b4.pack(side='left')
    root.mainloop()
    

    结果:
    在这里插入图片描述
    这个是间隔为(10,30)的情况。

    import tkinter as tk
    root=tk.Tk()
    root.geometry('300x240')
    b1 = tk.Label(root,text='文本1')
    b1.pack(side='left')
    b2 = tk.Label(root,text='文本2')
    b2.pack(side='left')
    b3 = tk.Label(root,text='文本3')
    b3.pack(side='left',padx=(10,30))
    b4 = tk.Label(root,text='文本4')
    b4.pack(side='left')
    root.mainloop()
    

    结果:
    在这里插入图片描述
    pady和padx类似,只不过是y方向的间隔。也可以使用元组来表示上下不同的间隔

    import tkinter as tk
    root=tk.Tk()
    root.geometry('300x240')
    b1 = tk.Label(root,text='文本1')
    b1.pack()
    b2 = tk.Label(root,text='文本2')
    b2.pack()
    b3 = tk.Label(root,text='文本3')
    b3.pack(pady=(10,30))
    b4 = tk.Label(root,text='文本4')
    b4.pack()
    root.mainloop()
    

    结果:
    在这里插入图片描述

    • before、after和in_

    before 和after可以改变pack控件的次序。正常的情况是按照代码的次序pack。不过当需要提前或者推后pack的次序时,可以使用before或者after。比如before=w1,after=w2等等。w1和w2是创建的控件的实例。
    下面的代码就是先pack标签b3的。改变了次序。after的情况就不展示了。和before非常类似。

    import tkinter as tk
    root=tk.Tk()
    root.geometry('300x240')
    b1 = tk.Label(root,text='文本1')
    b1.pack()
    b2 = tk.Label(root,text='文本2')
    b2.pack()
    b3 = tk.Label(root,text='文本3被提前到文本2之前pack')
    b3.pack(before=b2)
    root.mainloop()
    

    结果:
    在这里插入图片描述
    in_是因为in是python的关键字,所以加了一个下划线。in_的作用是设置当前控件的父控件,可以替换掉在控件初始化时候的父控件。本例中,就是用b2替换了root。

    import tkinter as tk
    root=tk.Tk()
    root.geometry('300x240')
    b1 = tk.Label(root,text='文本1')
    b1.pack()
    b2 = tk.Label(root,text='文本2',bg='blue')
    b2.pack()
    b3 = tk.Label(root,text='文本3被放在文本2中')
    b3.pack(in_=b2)
    root.mainloop()
    

    结果:
    在这里插入图片描述
    3.2.3.1.2 pack 函数
    pack的函数包括:

    函数名 描述
    slaves() 以列表方式返回本控件的所有子控件对象。
    propagate(flag) 设置为True表示父控件的几何大小由子控件决定(默认值),反之则无关。
    info() 返回pack提供的选项所对应的数值,返回值为字典类型
    forget() 将控件从当前的控件管理器中移除,其实是将控件隐藏并且忽略原有设置,对象依旧存在,可以用pack(option, …)将其显示。
    location(x, y) x, y为以像素为单位的点,函数返回此点是否在单元格中,在哪个单元格中。返回单元格行列坐标,(-1, -1)表示不在其中。
    size() 返回控件所包含的单元格,揭示控件大小。
    • slaves() 函数

    slaves()函数返回本控件的所有子控件对象。如果不使用pack(),就算已经实例化了子控件,slaves()也不会输出没有pack()的子控件。比如b4就不会输出。而b2和b3会被认为是b1的子控件。

    import tkinter as tk
    root=tk.Tk()
    root.geometry('300x240')
    b1 = tk.Label(root,text='文本1')
    b1.pack()
    b2 = tk.Label(b1,text='文本2')
    b2.pack()
    b3 = tk.Label(b1,text='文本3')
    b3.pack()
    b4 = tk.Label(b1,text='文本4')
    print(b1.slaves())
    root.mainloop()
    

    结果:

    [<tkinter.Label object .!label.!label>, <tkinter.Label object .!label.!label2>]
    
    • propagate(flag) 函数

    该函数决定父控件的大小是否与子控件有关。如果flag是True则父控件的大小为包括子控件的大小。如果flag是False,则表示父控件的大小与子控件无关。不过geometry()会让propagate()失效,窗口的大小由geometry()决定。

    import tkinter as tk
    root=tk.Tk()
    b1 = tk.Label(root,text='文本1')
    b1.pack()
    b2 = tk.Label(root,text='文本2')
    b2.pack()
    b3 = tk.Label(root,text='文本3')
    b3.pack()
    root.propagate(False)
    root.mainloop()
    import tkinter as tk
    root=tk.Tk()
    b1 = tk.Label(root,text='文本1')
    b1.pack()
    b2 = tk.Label(root,text='文本2')
    b2.pack()
    b3 = tk.Label(root,text='文本3')
    b3.pack()
    root.propagate(True)
    root.mainloop()
    

    结果:
    在这里插入图片描述
    在这里插入图片描述
    说明:可以看出True或者False情况下,窗口的大小是不同。

    • info() 函数

    info()返回控件的信息。这些信息以字典的形式返回。
    比如上面例子b2的信息如下:

    import tkinter as tk
    root=tk.Tk()
    b1 = tk.Label(root,text='文本1')
    b1.pack()
    print(b1.info())
    root.mainloop()
    

    结果:

    {'in': <tkinter.Tk object .>, 'anchor': 'center', 'expand': 0, 'fill': 'none', 'ipadx': 0, 'ipady': 0, 'padx': 0, 'pady': 0, 'side': 'top'}
    
    • forget() 函数

    forget()函数是隐藏控件的。调用之后,该控件从父控件中消失。但是该控件的实例还是存在的。可以用pack()直接恢复显示这个控件。为了演示这个功能,需要增加2个按钮和2个回调函数。回调函数b3_forget()是隐藏标签b3,而b3_pack()是显示标签b3的。这次的代码,会贴上完整的部分。

    import tkinter as tk
    root=tk.Tk()
    root.geometry('300x240')
    b1 = tk.Label(root,text='文本1')
    b1.pack()
    b2 = tk.Label(root,text='文本2')
    b2.pack()
    b3 = tk.Label(root,text='文本3')
    b3.pack()
    def b3_forget():
        b3.forget()
    def b3_pack():
        b3.pack()
    b4 = tk.Button(root,text='隐藏文本3',command=b3_forget)
    b4.pack()
    b5 = tk.Button(root,text='显示文本3',command=b3_pack)
    b5.pack()
    root.mainloop()
    #点击’隐藏文本3’按钮后,’文本3’的标签消失。
    #再点击’显示文本3’按钮,则显示’文本3’
    

    结果:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    注意:此时’文本3’显示在最下面。因为pack()是按照次序来的。以pack()的次序为准,而不是以实例化的次序。

    • location(x,y)函数

    其实这个函数是给grid布局方法使用的。在pack方法中也可以用,不过无论怎么调用,返回的都是(-1,-1)。也就是不在任何单元格内。的确,pack方法就没有单元格的概念,怎么会有符合条件的单元格呢?

    • size()函数

    size() 函数是返回包括控件的单元格。和location()函数一样,在pack中无效。因为所有控件的返回值都是(0,0)。

    展开全文
  • Toplevel(顶级窗口)组件类似于 Frame 组件,但 Toplevel 组件是一个独立的顶级窗口,这种窗口通常拥有标题栏、边框等部件,和 Tk() 创建出来的根窗口是一样的,共享着一样的方法。 目录 何时使用Toplevel组件? ...

    Toplevel(顶级窗口)组件类似于 Frame 组件,但 Toplevel 组件是一个独立的顶级窗口,这种窗口通常拥有标题栏、边框等部件,和 Tk() 创建出来的根窗口是一样的,共享着一样的方法。

    目录

    何时使用Toplevel组件?

    Tk(根窗口)和Toplevel(顶级窗口)的方法

    attribute(*args)之args参数


     

    何时使用 Toplevel 组件?

    Toplevel 组件通常用在显示额外的窗口、对话框或者其他弹出窗口上。


    下面的例子,我们在 root 窗口添加一个按钮用于创建一个顶级窗口,点一下来一个。

    from tkinter import *
    
    root = Tk()
    
    def create():
        top = Toplevel()
        top.title('Python')
    
        msg = Message(top, text='I love study')
        msg.pack()
    
    Button(root, text='创建顶级窗口', command=create).pack()
    
    mainloop()

     

     

    Tk(根窗口)和Toplevel(顶级窗口)的方法

    下边这一系列方法用于与窗口管理器进行交互。他们可以被Tk(根窗口)调用,同时也适用于Toplevel(顶级窗口)。

    注意:并非所有操作系统均完全支持下方所有方法的实现。

    方法 含义
    aspect(minNumber=None, minDenom=None, maxNumber=None, maxDenom=None,)

    --控制该窗口的宽高比(width:height)

    --宽高比限制在:minNumber/minDenom~maxNumber/maxDenom

    --如果忽略参数,则返回一个4元组表示当前的限制(如果有的话)

    attributes(*args)

    --设置和获取窗口属性

    --如果你只给出选项名,将返回当前窗口该选项的值

    --注意:以下选项不支持关键字参数,你需要在选项前加横岗(-)并用字符串的方式表示,用逗号(,)隔开选项和值。(博主注:此处的哪些选项不支持可能当时忘写了,记得这里是在哪里出现的可以在评论里留下视频链接和具体时长,我回头加上)

    --例如你希望设置窗口的透明度为50%,你应该使用attributes("-alpha", 0.5)代替 attributes(alpha=0.5)

    -- args选项列表见文末

    client(name=None)

    --设置和获取WM_CLIENT_MACHINE属性

    --如果要删除WM_CLIENT_MACHINE属性,赋值为空字符串即可

    --该属性仅支持X窗口系统的窗口管理器,其他系统均忽略

    colormapwindows(*wlist)

    --设置和获取WM_COLORMAP_WINDOWS属性

    --该属性仅支持X窗口系统的窗口管理器,其他系统均忽略

    command(value=None)

    --设置和获取WM_COMMAND属性

    --该属性仅支持X窗口系统的窗口管理器,其他系统均忽略

    deiconify()

    --显示窗口

    --默认情况下新创建的窗口都会显示在屏幕上,但是用iconify()或withdraw()方法可以在屏幕上移除窗口

    focusmodel(model=None) --设置和获取焦点模式
    frame()

    --返回一个字符串表示当前系统特征

    --对于类Unix系统,返回值是X窗口标识符

    --对于Windows系统,返回值是HWND强制转换为长整形的结果

    geometry(geometry=None)

    --设置和获取窗口的尺寸

    --geometry的参数格式为:"%dx%d%+d%+d"%(width, height, xoffset, yoffset)

    (wm_)grid(baseWidth=None, baseHeight=None, widthInc=None, heightInc=None)

    --通知窗口管理器该窗口将以网格的形式重新调整尺寸

    --baseWidth和baseHeight指定Tk_GeometryRequest要求的网格单元数

    --widthInc和heightInc指定单元的高度和宽度

    (wm_)group(window=None)

    --将窗口添加到窗口群中

    --window参数指定控制窗口群的主窗口

    --如果忽略该选项,将返回当前窗口群的主窗口

    (wm_)iconbitmap(bitmap=None, default=None)

    --设置和获取窗口的图标

    --例如root.iconbitmap(bitmap="python.ico")

    --default参数可以用于指定由该窗口创建的子窗口的默认图标

    (wm_)iconify()

    --将窗口图标化(最小化)

    --需要重新显示窗口,用deiconify()方法

    --该方法会使得state()返回"iconic"

    (wm_)iconmask(bitmap=None) --设置和获取位图编码
    (wm_)iconname(newName=None) --设置和获取当前窗口图标化(最小化)时的图标名字
    (wm_)iconposition(x=None, y=None) --设置和获取当前窗口图标化(最小化)时的图标位置
    (wm_)iconwindow(pathName=None)

    --设置和获取当前窗口图标化(最小化)时的组件窗口

    --该方法会使得state()返回“icon”

    (wm_)maxsize(width=None, height=None) --设置和获取该窗口的最大尺寸
    (wm_)minsize(width=None, height=None) --设置和获取该窗口的最小尺寸
    (wm_)overrideredirect(boolean=None) --如果参数为True,该窗口忽略所有的小部件(也就是说该窗口将没有传统的标题栏、边框等部件)
    (wm_)positionfrom(who=None)

    --指定窗口位置由“谁决定

    --如果who参数是“user”,窗口位置由用户决定

    --如果who参数是“program”,窗口位置由系统决定

    (wm_)protocol(name=None, func=None)

    --将回调函数func与相应的规则name绑定

    --name参数可以是“WM_DELETE_WINDOW”:窗口被关闭的时候

    --name参数可以是“WM_SAVE_YOURSELF”:窗口被保存的时候

    --name参数可以是“WM_TAKE_FOCUS”:窗口获得焦点的时候

    (wm_)resizable(width=None, height=None)

    --指定是否可以改变该窗口的尺寸

    --width为True说明允许调整窗口的水平尺寸

    --height为True说明允许调整窗口的垂直尺寸

    (wm_)sizefrom(who=None)

    --指定窗口尺寸由“谁决定

    --如果who参数是“user”,窗口尺寸由用户决定

    --如果who参数是“program”,窗口尺寸由系统决定

    (wm_)state(newstate=None)

    --设置和获得当前窗口的状态

    --newstate的只可以是'normal', 'iconoc'(见iconify), 'withdraw'(见withdraw), 'icon'(见iconwindow)和'zoomed'(放大,Windows特有)

    (wm_)title(string=None) --设置窗口的标题
    (wm_)transient(master=None) --指定为master的临时窗口
    (wm_)withdraw()

    --将窗口从屏幕上移除(并没有销毁)

    --需要重新显示窗口,使用deiconify()方法

    --该方法会使得state()返回"withdraw"

    wm_aspect(minNumber=None, minDenom=None, maxNumber=None, manDenom=None) --见上方aspect()
    wm_attributes(*args) --见上方attributes()

    wm_client(name=None)

    --见上方client()
    wm_colormapwindows(*wlist) --见上方colormapwindows()
    wm_command(value=None) --见上方command()
    wm_deiconify() --见上方deiconify()
    wm_focusmodel(model=None) --见上方focusmodel()
    wm_frame() --见上方frame()
    wm_geometry(geometry=None) --见上方geometry()

     

    attributes(*args) 之 args 参数

    选项 含义
    alpha

    (Windows,Mac)控制窗口的透明度

    1.0表示不透明,0.0表示完全透明

    该选项并不支持所有的系统,对于不支持的系统,Tkinter绘制一个不透明(1.0)的窗口

    disabled (Windows)禁用整个窗口(这时候你只能从任务管理器中关闭它)
    fullscreen (Windows,Mac)如果设置为True,则全屏显示窗口
    modified (Mac)如果设置为True,该窗口被标记为改动过
    titlepath (Mac)设置窗口代理图标的路径
    toolwindow (Windows)如果设置为True,该窗口采用工具窗口的样式
    topmost (Windows,Mac)如果设置为True,该窗口将永远置顶

     

    下例实现了根窗口全屏并且半透明,以及顶级窗口半透明。

    from tkinter import *
     
    root = Tk()
    
    root.attributes("-alpha", 0.5, "-fullscreen", True)
    
    def create():
        top = Toplevel()
        top.title('Python')
        top.attributes("-alpha", 0.5)
     
        msg = Message(top, text='I love study')
        msg.pack()
     
    Button(root, text='创建顶级窗口', command=create).pack()
     
    mainloop()
    

     

     

     

     

    展开全文
  • 通过例子来说明如何正确的使用tkinter控件的属性来打开或关闭可视属性

    通过小例子帮助我们更好的理解如何使用tkinter控件的 pack_forget(),grid_forget(),grid_remove()

    https://www.delftstack.com/howto/python-tkinter/how-to-hide-recover-and-delete-tkinter-widgets/

    1. pack_forget() 方法来隐藏Tkinter控制

    与pack()方法相反,我们可以通过调用pack_forget()方法来隐藏Tkinter控件

    try:
        import Tkinter as tk
    except:
        import tkinter as tk
        
    
    class Test():
       def __init__(self):
           self.root = tk.Tk()
           self.label=tk.Label(self.root,
                               text = "Label")
           self.buttonForget = tk.Button(self.root,
                              text = 'Click to hide Label',
                              command=lambda: self.label.pack_forget())
           self.buttonRecover = tk.Button(self.root,
                              text = 'Click to show Label',
                              command=lambda: self.label.pack())       
           
           self.buttonForget.pack()
           self.buttonRecover.pack()
           self.label.pack(side="bottom")
           self.root.mainloop()
    
       def quit(self):
           self.root.destroy()
            
    app = Test()
    

    在这里插入图片描述
    点"Click to hide Label"按钮,通过调用pack_forget()方法,将会隐藏Label标签
    点"Click to show Label"按钮,通过执行pack()方法,程序会再次在界面显示Label标签

    grid_forget() 方法来隐藏控件

    如果控制是用grid()方法来绘制的,可以通过grid_forget()方法来隐藏控件

    try:
        import Tkinter as tk
    except:
        import tkinter as tk
        
    
    class Test():
       def __init__(self):
           self.root = tk.Tk()
           self.label=tk.Label(self.root,
                               text = "Label")
           self.buttonForget = tk.Button(self.root,
                              text = 'Click to hide Label',
                              command=lambda: self.label.grid_forget())
           self.buttonRecover = tk.Button(self.root,
                              text = 'Click to show Label',
                              command=lambda: self.label.grid())       
           
           self.buttonForget.grid(column=0, row=0, padx=10, pady=10)
           self.buttonRecover.grid(column=0, row=1, padx=10,  pady=10)
           self.label.grid(column=0, row=2, padx=10, pady=10)
           self.root.mainloop()
    
       def quit(self):
           self.root.destroy()
            
    app = Test()
    

    在这里插入图片描述
    当你执行了隐藏按钮的动作后,会发现label标签的原始位置发生了变化。如果想让它回到原始位置,
    那么可行的方法是用grid_remove()主法来操作。

    用grid_remove()方法来保持隐藏控制的可再现位置

    grid_remove()方法在隐藏控件的同时会记住控件行,列位置属性便于恢复

    try:
        import Tkinter as tk
    except:
        import tkinter as tk
        
    
    class Test():
       def __init__(self):
           self.root = tk.Tk()
           self.label=tk.Label(self.root,
                               text = "Label")
           self.buttonForget = tk.Button(self.root,
                              text = 'Click to hide Label',
                              command=lambda: self.label.grid_remove())
           self.buttonRecover = tk.Button(self.root,
                              text = 'Click to show Label',
                              command=lambda: self.label.grid())       
           
           self.buttonForget.grid(column=0, row=0, padx=10, pady=10)
           self.buttonRecover.grid(column=0, row=1, padx=10,  pady=10)
           self.label.grid(column=0, row=2, padx=10, pady=20)
           self.root.mainloop()
    
       def quit(self):
           self.root.destroy()
            
    app = Test()
    

    在这里插入图片描述

    通地destroy方法来删除控件

    try:
        import Tkinter as tk
    except:
        import tkinter as tk
        
    
    class Test():
       def __init__(self):
           self.root = tk.Tk()
           self.label=tk.Label(self.root,
                               text = "Label")
           self.buttonForget = tk.Button(self.root,
                              text = 'Click to hide Label',
                              command=lambda: self.label.destroy())
           self.buttonRecover = tk.Button(self.root,
                              text = 'Click to show Label',
                              command=lambda: self.label.pack())       
           
           self.buttonForget.pack()
           self.buttonRecover.pack()
           self.label.pack(side="bottom")
           self.root.mainloop()
    
       def quit(self):
           self.root.destroy()
            
    app = Test()
    

    执行删除操作后,如果再次执行pack()方法,程序则会报错

    Exception in Tkinter callback
    Traceback (most recent call last):
      File "D:\WinPython\WPy-3661\python-3.6.6.amd64\lib\tkinter\__init__.py", line 1702, in __call__
        return self.func(*args)
      File "C:\Users\jinku\OneDrive\Bureaublad\test.py", line 17, in <lambda>
        command=lambda: self.label.pack())
      File "D:\WinPython\WPy-3661\python-3.6.6.amd64\lib\tkinter\__init__.py", line 2140, in pack_configure
        + self._options(cnf, kw))
    _tkinter.TclError: bad window path name ".!label"
    
    展开全文
  • Ubuntu下安装卸载桌面系统

    千次阅读 2007-06-05 15:52:00
    安装GNOME方法:sudo apt-get install gnome或者sudo apt-get install gnome-desktop删除Gnome的方法:apt-get –purge remove liborbit2 ============安装kde方法:sudo apt-get install kde(实验可以...
  • python】tkinter教程、35个tkinter示例代码和GUI图示

    万次阅读 多人点赞 2019-01-26 22:43:53
    #示例1:主窗口及标题 import tkinter as tk app = tk.Tk() #根窗口的实例(root窗口) app.title('Tkinter root window') #根窗口标题 ...theLabel = tk.Label(app, text='...theLabel.pack() #pack()用于自动调节...
  • 22.2 方法 方法 描述 bbox(item, column=None) 返回指定item的框选范围,或者单元格的框选范围 column( cid, option=None, **kw) 设置或者查询某一列的属性 delete(*items) 删除指定行或者节点(含子节点) ...
  • 代码也浪漫——Python烟花秀

    万次阅读 多人点赞 2018-12-05 15:35:23
    下午太困,无意中看到一段用Tkinter库写的放烟花的程序,就跟着跑了一遍。 设计理念:通过让画面上一个粒子分裂为X数量的粒子来模拟爆炸效果。粒子会发生“膨胀”,意思是它们会以恒速移动且相互之间的角度相等。...
  • Python 流媒体播放器(基于VLC)

    万次阅读 多人点赞 2020-09-24 23:41:59
    文章目录环境准备VLC 安装安装python-vlc 绑定简单播放示例VLC 监听器视频加字幕VLC的选项参数设置音频可视化在Tkinter中嵌入视频跨平台 网上关于Python的音视频播放示例都集中在简单的多媒体库或者PyGame这样的游戏...
  • python 实现漂亮的烟花,樱花,玫瑰花

    万次阅读 多人点赞 2020-03-29 20:11:27
    import tkinter as tk from PIL import Image, ImageTk from time import time, sleep from random import choice, uniform, randint from math import sin, cos, radians # 模拟重力 GRAVITY = 0.05 # 颜色选项...
  • 10.3 方法 方法 描述 bbox(index) 计算指定字符串的矩形边界。 Index 字符串标识索引返回值:一个(x,y,width,height)的四元组。或者None,如果字符串不可见 compare(index1, op, index2) ...=...
  • Python开发系列课程(1) - 初识Python

    千次阅读 多人点赞 2018-03-16 22:14:43
    初识Python Python简介 Python是一个很棒的语言,从它诞生的那天起,一直致力于向开发者提供同时具备可读性和生产力的多范式编程语言。曾经有人Python仅仅是一门脚本语言,不适合构建大型系统,但是现在在社区和...
  • python入门知识总结

    千次阅读 2016-03-01 21:59:32
    暑假没回家 ,一不小心培训了python,反正免费的不听白不听,总比呆在寝室无聊好的多,庆幸的是坚持下来了,现在回想起来虽然学习时间很短,但确实感触蛮大的,因此写这篇文章总结一下。第一节课就被授课者吓到了,...
  • Tkinter 组件详解(十三):Menu

    万次阅读 多人点赞 2018-12-27 10:37:59
    Menu(菜单)组件用于实现顶级菜单、下拉菜单和弹出菜单。 何时使用 Menu 组件? Menu 组件通常被用于实现应用程序上的各种菜单,由于该组件是底层代码实现,所以不建议你自行通过按钮和其他组件来...root = tk.T...
  • Python Tkinter教程之Grid篇

    千次阅读 2012-12-16 23:21:04
    '''Tkinter教程之Grid篇''' # Tkinter参考中最推荐使用的一个布局器。实现机制是将Widget逻辑上分割成表格,在指定的位置放置想要的Widget就可以了。 '''1.... ...root = Tk() # 创建两个Label
  • Python Tkinter 会话窗口

    千次阅读 2014-08-13 17:31:58
    Dialog Windows While the standard dialogs described in the previous section may be sufficient for many simpler applications, most larger applications require more complicated dialogs....
  • Python基本手册

    万次阅读 多人点赞 2016-10-09 18:39:59
    Python基本手册关键词: PythonPython基本手册 常见内置函数 标准库 爬虫 1 GET 2 POST 3 Headers 字符串 模块 1 定义模块 2 常用的字符串方法 列表list 1 列表相关的内置函数 2 列表元素的循环 3 列表切片 4 列表...
  • 代码也浪漫:用Python放一场烟花秀 参考资料:towardsdatascience.com 天天敲代码的朋友,有没有想过代码也可以变得很酷炫又浪漫?今天就教大家用Python模拟出绽放的烟花庆祝昨晚法国队夺冠,工作之余也可以随时让...
  • python学习笔记:小甲鱼python全套视频 + python基础教程 第2版修订版(书附10个大型案例)python学习环境:(python3)win10下python3.5.4的IDLE + ubuntu下python3辅助python分享范围:适合有C/C++/JAVA任意语言之...
1 2 3 4 5 ... 15
收藏数 287
精华内容 114
关键字:

pack移除 python tk