首页 > 编程语言 >Python+tkinter动态创建与销毁组件小案例

Python+tkinter动态创建与销毁组件小案例

时间:2023-06-09 20:01:30浏览次数:57  
标签:tkinter Python 动态创建 btnClear 按钮 20 root


本文代码演示了如何在tkinter窗体上动态创建组件以及销毁组件的方法。

import tkinter
import tkinter.messagebox
import tkinter.simpledialog
btnList = []
# 动态创建组件,并计算组件在窗体上的位置
def place(n):
    for i in range(n):
        exec('btn'+str(i)+'=tkinter.Button(root,text='+str(i)+')')
        eval('btn'+str(i)).place(x=80, y=10+i*30, width=60, height=20)
        btnList.append(eval('btn'+str(i)))
    root.geometry('200x'+str((n)*30+70)+'+400+300')
    return n*30 + 10
# 创建tkinter应用程序
root = tkinter.Tk()
# 窗口标题
root.title('动态创建组件')
# 窗口初始大小和位置
root.geometry('200x180+400+300')
# 不允许改变窗口大小
root.resizable(False, False)
# 增加按钮的按钮
def btnSetClick():
    n = tkinter.simpledialog.askinteger(title='输入一个整数',
                                        prompt='想动态增加几个按钮:',
                                        initialvalue=3)
    if n and n>0:
        startY = place(n)
        modify(startY)
        # 根据需要禁用和启用“增加按钮”和“清空按钮”
        btnSet['state'] = 'disabled'
        btnClear['state'] = 'normal'
btnSet = tkinter.Button(root,
                        text='增加按钮',
                        command=btnSetClick)
def btnClearClick():
    global btnList
    # 删除动态创建的按钮
    for btn in btnList:
        btn.destroy()
    btnList = []
    modify(20)
    btnClear['state'] = 'disabled'
    btnSet['state'] = 'normal'
btnClear = tkinter.Button(root,
                          text='清空按钮',
                          command=btnClearClick)
# 默认处于禁用状态
btnClear['state'] = 'disabled'
# 动态调整“增加按钮”和“清空按钮”的位置
def modify(startY):
    btnSet.place(x=10, y=startY, width=80, height=20)
    btnClear.place(x=100, y=startY, width=80, height=20)
modify(20)
root.mainloop()

代码运行后初始状态为:

Python+tkinter动态创建与销毁组件小案例_js

单击“增加按钮”后,在弹出的窗口中输入5,然后窗体变为下面的样子:

Python+tkinter动态创建与销毁组件小案例_tkinter_02

单击“清空按钮“后恢复到初始状态。

标签:tkinter,Python,动态创建,btnClear,按钮,20,root
From: https://blog.51cto.com/u_9653244/6450992

相关文章

  • Python代码调试之异常回溯
    当发生异常时,Python会回溯异常,给出大量的提示,可能会给程序员的定位和纠错带来一定的困难,这时可以使用sys模块的exc_info()函数来回溯最近一次异常。sys.exc_info()的返回值tuple是一个三元组(type, value, traceback),其中:type——异常的类型value——异常的信息或者参数tr......
  • Python+pandas读取Excel文件并统计演员参演电影数量
    Excel样本数据请参考Python读取Excel文件并统计演员参演电影>>>importpandasaspd>>>df=pd.read_excel('电影导演演员.xlsx')>>>df电影名称导演演员0电影1导演1演员1,演员2,演员3,演员41电影2导演2演员3,演员2,演员4,演......
  • python爬虫--爬取各大城市的各个区域的租房信息
    一、选题背景衣食住行是生活的基本需求。衣和食好解决,不喜欢的衣服可以买新的,不好吃的食物可以换一家吃。可是在住宿上,买房和租房的置换成本都相对较高,因此房源选择尤为慎重。作为目前买不起房的自然人,我们一般是通过中介来实现租房的需求比如自如,贝壳找房和链家。链家占据了租赁......
  • 详解Python中的浅复制与深复制
    列表对象的copy()方法返回列表的浅复制。所谓浅复制,是指生产一个新的列表,并且把原列表中所有元素的引用都复制到新列表中。如果原列表中只包含整数、实数、复数等基本类型或元组、字符串这样的不可变类型,一般是没有问题的。但是,如果原列表中包含列表之类的可变数据类型,由于浅复制时......
  • Python实现图像空域随机水印加入与提取
    本文要点在于Python扩展库pillow中Image类的运用。图像空域随机水印的主要思路在于:在原始图像中随机选取一些位置替换为水印图片中的非背景像素,同时生成日志文件记录替换的位置和水印中像素位置的对应关系,然后可以根据加入水印的图片和日志文件来提取和验证水印。fromosimportre......
  • Python泛型函数与单分发器
    这里的泛型函数是指由一组为不同类型参数执行相似操作的函数组成的函数,具体调用哪一个函数的实现取决于分发算法和参数类型。Python单分发器是实现泛型函数的一种形式,由一个单一参数来决定选择和调用哪个函数。下面的代码演示了单分发器泛型函数的有关用法:fromfunctoolsimportsi......
  • 列表元素循环移位中Python切片的妙用
    之前有个文章中介绍了列表循环移位的3中方法其中第二种方法虽然更直接地翻译了题目的要求,但是显得还是有点啰嗦,如果充分利用Python中的切片技术,可以写成下面更简洁的形式:>>>defdemo(lst,k):x=lst[k-1::-1]y=lst[:k-1:-1]returnlist(reversed(x+y))#测试用......
  • Python中的循环结构
    Python主要有for循环和while循环两种形式的循环结构,多个循环可以嵌套使用,并且还经常和选择结构嵌套使用。while循环一般用于循环次数难以提前确定的情况,当然也可以用于循环次数确定的情况;for循环一般用于循环次数可以提前确定的情况,尤其适用于枚举或遍历序列或迭代对象中元素的场合......
  • 使用Python批量随机化文件名
    本文的代码可以把指定文件夹中的所有文件名批量随机化。fromstringimportascii_lettersfromosimportlistdir,renamefromos.pathimportsplitext,joinfromrandomimportchoice,randintdefrandomFilename(directory):forfninlistdir(directory):#......
  • Python enumerate()函数的用法
    1.描述enumerate()函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在for循环当中。 2.语法enumerate(sequence,[start=0]) 3.参数sequence: 一个序列、迭代器或其他支持迭代对象。start: 下标起始位......