首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >无法在python中动态创建父-子tkinter小部件。

无法在python中动态创建父-子tkinter小部件。
EN

Stack Overflow用户
提问于 2018-02-06 15:53:54
回答 2查看 212关注 0票数 1

我正在通过创建一个抵押计算器来玩tkinter。我正在尝试从一个包含具有相关属性的列表的单独文件动态创建小部件。

主要文件是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import tkinter as tk
import tkinter.ttk as ttk

import tkinterwidgetinfo as twi

root=tk.Tk()
root.title('Tkinter Practice')

class Application(ttk.Frame):
    def __init__(self, master=None):
        super().__init__()
        self.pack()
        self.createApplication()

    def createApplication(self):
        ## create widgets dynamically from twi
        for i in twi.progWidgets:
            a = i[1]+i[2]+'**'+str(i[3])+')'
            i[0] = eval(a)
            i[0].pack()

app = Application(root)
app.mainloop()

包含小部件信息的列表位于一个单独的文件中并导入。资料如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
progWidgets = [
    ['inputFrame', 'ttk.LabelFrame(', '', {'text': "User Input",
                                           'labelanchor': "nw"}],
    ['principalLabel', 'ttk.Label(', 'inputFrame,', {'text' : "Principal(£)"}],
    ['principalEntry', 'ttk.Entry(', 'inputFrame,', {}],
    ['termLabel', 'ttk.Label(', 'inputFrame,', {'text' : "Mortgage Term (Years)"}],
    ['termEntry', 'ttk.Entry(', 'inputFrame,', {}]
    ]

当我运行这段代码时,没有创建第一个小部件(标签框架)。但是,当我在循环外部创建标签框架时,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import tkinter as tk
import tkinter.ttk as ttk

import tkinterwidgetinfo as twi

root=tk.Tk()
root.title('Tkinter Practice')

class Application(ttk.Frame):
    def __init__(self, master=None):
        super().__init__()
        self.pack()
        self.createApplication()

    def createApplication(self):
        inputFrame = ttk.Labelframe(text = "User Input",
                                    labelanchor = "nw")
        inputFrame.pack()

        ## create widgets dynamically from twi
        for i in twi.progWidgets:
            a = i[1]+i[2]+'**'+str(i[3])+')'
            i[0] = eval(a)
            i[0].pack()

app = Application(root)
app.mainloop()

这个程序运行得很好。如何将标签框包括在循环中?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-12-17 16:14:16

对于任何发现这个问题的人来说,从内容中可以看出,我当时对编程非常陌生。在我的记忆中,我有一种天真的印象,认为以一种非常抽象的方式组织代码可以节省处理时间,或者更容易阅读。我没有掌握控制计算机操作的基本机制。考虑到这一点,akarilimano的回答是正确和有效的,但我支持在最初的问题下面的评论,它批评使用这样一个奇怪的布局。

来自PEP 20

  • 美丽胜于丑陋。
  • 外显好于内隐。
  • 简单胜于复杂。
  • 可读性很重要。
  • 如果实现很难解释,那是个坏主意。
票数 0
EN

Stack Overflow用户

发布于 2018-02-07 05:03:45

您使用'inputFrame'作为父名,但没有定义它。当您运行第二段代码时,定义了inputFrame,并且一切正常工作。

我同意评论者的观点,即使用eval是一个糟糕的想法(安全原因、灵活性),但您仍然可以这样做:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for i in twi.progWidgets:
    a = i[0]+'='+i[1]+i[2]+'**'+str(i[3])+')'
    eval(a)
    a = i[0]+'.pack()'
    eval(a)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48653833

复制
相关文章
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)).p
Python小屋屋主
2018/04/16
5.2K0
Python+tkinter动态创建与销毁组件小案例
在 Vue 中,父组件中传递数据给子组件
在父组件中传递数据给子组件。在 Vue 中,可以通过 props 属性来实现父组件向子组件传递数据的功能。
王小婷
2023/09/11
3020
Vue 在父(子)组件引用其子(父)组件方法和属性
<button @click="callChildMethod()">父组件调用子组件方法</button>
授客
2020/06/23
1.9K0
subprocess:Python中创建子进程
subprocess库提供了一个API创建子进程并与之通信。这对于运行生产或消费文本的程序尤其有好处,因为这个API支持通过新进行的标准输入和输出通道来回传数据。
luckpunk
2023/09/29
5480
subprocess:Python中创建子进程
在 Vue 中,子组件如何向父组件传递数据?
在子组件中,使用 $emit 方法触发一个自定义事件,并传递要传递给父组件的数据作为参数。
王小婷
2023/09/03
6200
【tkinter系列 第一课 创建主窗口及Label部件 】
python中通常我们写程序,显示结果和操作都是在终端区,如果要想实现一个有显示界面的程序那该怎样实现呢?python中有好几个库都可以实现,这个系列我们一起来学习如何使用python自带的tkinter库来实现。
叶子陪你玩
2020/03/12
1.2K0
Python在tkinter界面中显示matplotlib动画
在tkinter应用程序界面中同时显示matplotlib绘制的动态折线图、动态散点图和动态柱状图。
Python小屋屋主
2020/02/23
5K0
vue中在父组件点击按钮触发子组件的事件
1、父组件的button元素绑定click事件,该事件指向notify方法 2、给子组件注册一个ref=“child” 3、父组件的notify的方法在处理时,使用了$refs.child把事件传递给子组件的parentMsg方法,同时携带着父组件中的参数msg 4、子组件接收到父组件的事件后,调用了parentMsg方法,把接收到的msg放到message数组中
江一铭
2022/06/16
6.3K0
python开发_tkinter_多级子菜单
==========================================================
Hongten
2018/09/13
1.9K0
python开发_tkinter_多级子菜单
Python中动态创建类实例
简介 在Java中我们可以通过反射来根据类名创建类实例,那么在Python我们怎么实现类似功能呢? 其实在Python有一个builtin函数import,我们可以使用这个函数来在运行时动态加载一些模块。如下: def createInstance(module_name, class_name, *args, **kwargs): module_meta = __import__(module_name, globals(), locals(), [class_name]) class_m
kongxx
2018/05/14
2.4K0
关于java子父类关系的小坑
      学过JavaSE的都知道java类在初始化的时候,如果存在直接父类,是先初始化父类,然后才初始化子类。       子类拥有父类所有的非私有化成员,非私有的成员不仅仅包括public修饰的成员,protected修饰的(protected修饰的可以访问其他包中子父类),不写访问修饰符是默认default修饰(只能访问同一个包中的类)。        由类的加载机制可以得知,类的加载包括 加载,验证,准备,解析,初始化这几个阶段。 其中:类静态变量初始化是在虚拟机的方法区中初始化的,类的实例变量会
神秘的寇先森
2018/05/30
1.4K4
vue子组件传值给父组件_子组件调用父组件中的方法
大家好,又见面了,我是你们的朋友全栈君。 参考视频 : https://www.bilibili.com/video/av32790541/?spm_id_from=trigger_reload 原
全栈程序员站长
2022/10/04
4.2K0
vue子组件传值给父组件_子组件调用父组件中的方法
小程序父组件向子组件传值
子组件:tabs1 父组件:demo04 先将子组件和父组件直接产生特定的联系,需要在demo04.json里面以键值对的方式添加。
全栈程序员站长
2022/08/30
5920
小程序父组件向子组件传值
js操作DOM在父元素中的结尾添加子节点注意
所以js是不能直接传入字符串的,但是jquery的append可以直接传入html字符串。
蓓蕾心晴
2018/10/25
9.9K0
js操作DOM在父元素中的结尾添加子节点注意
Excel小技巧41:在Word中创建对Excel表的动态链接
Office套件之间协作配合非常方便。例如,我们可以在Word中放置一个来自Excel的表,并且可以随着Excel中该表的数据变化而动态更新。这需要在Word中创建一个对Excel表的动态链接,允许Word文档自动获取Excel表的变化并更新数据。
fanjy
2020/07/02
4.1K0
Python+tkinter实现弹出模态子窗口
程序运行后显示主窗口,单击主窗口上的按钮之后弹出模态子窗口,主窗口不再响应鼠标和键盘操作,直到模态子窗口关闭之后主窗口再恢复对鼠标和键盘操作的响应。
Python小屋屋主
2022/06/05
4.3K0
Python+tkinter实现弹出模态子窗口
Vue 父组件向子组件传递动态参数,子组件如何实时更新[通俗易懂]
项目问题介绍:父组件中填入各种查询条件,点击查询按钮查出符合条件的数据。其中,数据列表是引入的子组件。第一次加载的时候,子组件数据正常显示,再次查询的时候子组件怎么实现实时更新呢?
全栈程序员站长
2022/07/29
6.6K0
Vue 父组件向子组件传递动态参数,子组件如何实时更新[通俗易懂]
【tkinter系列 第七课 Scale部件 】
python中通常我们写程序,显示结果和操作都是在终端区,如果要想实现一个有显示界面的程序那该怎样实现呢?python中有好几个库都可以实现,这个系列我们一起来学习如何使用python自带的tkinter库来实现。
叶子陪你玩
2020/03/12
2.3K0
Python中动态创建类的方法
在Python中,类也是作为一种对象存在的,因此可以在运行时动态创建类,这也是Python灵活性的一种体现。
drunkdream
2018/08/02
5.2K5
点击加载更多

相似问题

SQL server条件选择语句

61

SQL Server中条件的可选性

21

根据条件选择列SQL Server

12

SQL Server CTE选择多个条件

21

SQL Server:选择多个表/条件

30
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文