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

本文代码演示了如何在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()

代码运行后初始状态为:

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

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

原文发布于微信公众号 - Python小屋(Python_xiaowu)

原文发表时间:2017-04-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏青蛙要fly的专栏

项目需求讨论-标题栏上的搜索功能

今天讲的就是一个很简单的具体开始时候遇到的需求,在标题栏中实现搜索功能,而且美工要求需要实现下面GIF图的效果,我就实现了下,可能不是最好的,有哪里可以更方便请...

931
来自专栏非著名程序员

基础篇章:关于 React Native 之 KeyboardAvoidingView 组件的讲解

友情提示:RN学习,从最基础的开始,大家不要嫌弃太基础,会的同学请自行略过,希望不要耽误已经会的同学的宝贵时间) 看完了这个组件的名字 KeyboardAvoi...

3845
来自专栏我就是马云飞

无需自定义View,彻底解放shape,selector吧

作为一个android程序员,对于shape、selector这两个标签一定不陌生。每当UI设计师给我们设计出一个个button背景的时候,我们就需要去draw...

952
来自专栏分享达人秀

日历视图CalendarView和定时器Chronometer

上一期学习了AnalogClock、DigitalClock和TextClock时钟组件,本期继续来学习日历视图CalendarView和定时器Chro...

2056
来自专栏张高兴的博客

张高兴的 Xamarin.Forms 开发笔记:TapGestureRecognizer 的简单介绍与应用

1172
来自专栏xx_Cc的学习总结专栏

六天完成一个简单iOS App - 第五天

3056
来自专栏Django Scrapy

Django安装及简单使用1.5

Django安装及简单使用1.5 代码都在github: URL:https://github.com/njxshr/codes/tree/master/t...

3327
来自专栏李蔚蓬的专栏

3.1 Android控件架构

通常情况下,在Activity中使用setContentView()方法来设置一个布局,在调用该方法后,布局内容才真正显示出来。下面来看一下Android界面的...

811
来自专栏何俊林

视频画面帧的展示控件SurfaceView及TextureView对比

SurfaceView是什么 ? SurfaceView优点及缺点? SurfaceView中双缓冲? TextureView是什么? TextureView优...

4276
来自专栏张高兴的博客

张高兴的 Xamarin.Forms 开发笔记:TapGestureRecognizer 的简单介绍与应用

3587

扫码关注云+社区