首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >无法在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

复制
相关文章
div 水平排列
Flex 布局 最简单的一种方式 ,css3 新增。父级 div 直接使用 display: flex; 即可 html
草帽lufei
2022/07/29
2.2K0
div 水平排列
div在div中垂直居中水平居中(css如何让div水平居中)
最近写网页经常需要将div在屏幕中居中显示,遂记录下几个常用的方法,都比较简单。 水平居中直接加上<center>标签即可,或者设置margin:auto;当然也可以用下面的方法
全栈程序员站长
2022/08/01
15K0
div在div中垂直居中水平居中(css如何让div水平居中)
水平/垂直都居中的div
用css样式使div水平/垂直居中,兼容于目前各种主流浏览器 思路: 用绝对定位将div左顶点,定位于浏览器正中心,然后再利用负的margin,将div强迫向上移动div高度一半,向左移动div宽度一半 <style> html,body{padding:0;margin:0;} #container {  position:absolute;  left:50%;  width:400px;  height:200px;  margin-left:-200px;  top:50%
菩提树下的杨过
2018/01/22
1.7K0
DIV元素水平和垂直居中
在前端开发过程中,经常要对元素进行居中设置。一般有水平居中,和垂直居中。一般设置水平居中简单。基本是margin:0 auto,就可以了。但是垂直居中,我们有时会觉得使用vertical-align,但是这个属性对div元素不起作用。 目前通用的解决办法是,使用绝对定位,然后设置left和top为50%。然后通过margin来设置。下面具体代码演示了一个简单的登录页面,然后使登录界面水平居中和垂直居中。代码如下: <html> <head> <title>div元素水平和垂直居中</
八哥
2018/01/18
2.8K0
DIV元素水平和垂直居中
div垂直居中的几种方式_div垂直水平居中
利用CSS进行元素的水平居中,比较简单,行级元素设置其父元素的text-align center,块级元素设置其本身的left 和 right margins为auto即可。本文收集了六种利用css进行元素的垂直居中的方法,每一种适用于不同的情况,在实际的使用过程中选择某一种方法即可。
全栈程序员站长
2022/08/03
4.1K0
div垂直居中的几种方式_div垂直水平居中
div盒子水平垂直居中方法
这是最简单的方法,不仅能实现绝对居中同样的效果,也支持联合可变高度方式使用。内容块定义transform: translate(-50%,-50%)  必须加上
Daotin
2018/08/31
1.9K0
div水平布局两边对齐
父容器div使用 position: relative;,子div使用 position:absolute;定位,注意边距问题
草帽lufei
2022/07/29
9130
div水平布局两边对齐
flex布局实现div的水平垂直居中
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/143096.html原文链接:https://javaforall.cn
全栈程序员站长
2022/08/31
1.9K0
flex布局实现div的水平垂直居中
Javascript 获取div真实高度
第一种情况就是宽高都写在样式表里。           比如#div1{width:120px;}。这中情况通过#div1.style.width拿不到宽度,而通过#div1.offsetWidth才可以获取到宽度。 第二种情况就是宽和高是写在行内中。           比如style="width:120px;",这中情况通过上述2个方法都能拿到宽度。(什么是行内,就是直接在html标签上写样式) 小结,因为id.offsetWidth和id.offsetHeight无视样式写在样式表还是行内,所以我们
问天丶天问
2018/06/13
5.1K0
实现div里的img图片水平垂直居中
方法一: 将display设置成table-cell,然后水平居中设置text-align为center,垂直居中设置vertical-align为middle。
全栈程序员站长
2022/08/22
3.2K0
实现div里的img图片水平垂直居中
让div水平垂直居中的几种方法
利用 CSS 来实现对象的垂直居中有许多不同的方法,比较难的是选择那个正确的方法。使用 CSS 实现水平居中很容易,但要实现垂直居中并不容易。而且有些方法在一些浏览器中无效。下面我们看一下使对象垂直集中的几种不同方法,以及它们各自的优缺点。
兔云小新LM
2019/07/24
2.1K0
html图片自适应div大小_未知宽高的div元素垂直水平居中
2.设置html图片的高度 计算出来的 height 正好是排版后的高度大小,是 CGFloat 类型,在是在我们设置UIlabel/Cell 高度时,可能存在四舍五入等,最后存在的一点点误差使得 UILabel 显示不全,可能出现缺少一行,上下空白太多等情况;
全栈程序员站长
2022/11/09
2.9K0
div内图片和文字水平垂直居中「建议收藏」
想必写css的都知道如何让单行文字在高度固定的容器内垂直居中,但是您知道或者想过让行数不固定的文字在高度固定的容器内垂直居中呢?本文将会告诉你如何实现多行文字的垂直居中显示。 关于图片垂直居中显示,想必很多写css的人都研究过,或者说是搜寻过方法。淘宝团队似乎提供了一种不错的方法,用font-size解决IE下垂直居中的问题,是个好方法吗?是的,方法是不错,可是问题也很多:不支持img外标签的浮动,致使多图片排列时需添加额外标签;需要记住一些比例参数,上手较难;原理艰深,兼容性不稳定等。但是在我看来,这个方法不足够好!本文将提供两种更为新颖的方法,代码简洁,原理简单,上手容易,兼容性强,出错率低的方法。inline-block裸标签对齐法,以及透明图片拉伸对齐法。 css是如此的精深,我相信后来人会有更加绝妙的方法。但是,本文提供的几种实现图片垂直居中方法,一定是目前最实用的几种方法。
全栈程序员站长
2022/11/17
3.7K0
div内图片和文字水平垂直居中「建议收藏」
JavaScript 鼠标拖拽div 改变其大小
转自: http://www.cnblogs.com/yushang/archive/2013/03/19/2968782.html
acoolgiser
2019/01/17
1.7K0
fullPage.js全屏滚动插件
如果你要制作一个全屏的网页,使用这个插件在合适不过,如QQ浏览器官方网站 直接下载 使用方法 1.引入fullpage.css文件 <link rel="stylesheet" type="text/css" href="css/jquery.fullPage.css"> 2.引入jq 和 fullpage.js文件 <script src="https://cdn.jsdelivr.net/npm/jquery@1.12.4/dist/jquery.min.js"></script> <script
切图仔
2022/09/08
15K0
不定宽高div水平垂直居中(兼容ie6)
不定宽高div水平垂直居中解决方法有很多,JS是最能够确保各种浏览器中一致性的,但是仍然可以使用CSS的方式来解决。
csxiaoyao
2019/02/15
1.6K0
Python Java 滑块识别-通杀滑块「建议收藏」
在写爬虫的时候,经常会遇到滑块问题,很多次都想过尝试如何攻破滑块,但是每次都没成功,除了最开始的极验滑块,当时通过原图和滑块图的对比,能够得出缺口坐标,但是随着极验、网易、腾讯滑块的更新,已经不能够找到原图了,下面给出滑块通杀的解决方案。
全栈程序员站长
2022/11/07
2.3K0
javascript当中div在单行(float:left)用法
div在单行(float:left) 例 1.2.1 divInOneLineIEFF.html <div style="width:100px"> <div style="float:left; background-color:#CBCC00; width:33px">ab</div> <div style="float:left; background-color:#01000;width:34px">&nbsp;</div> <div style="float:left; background-color:#00CBFF;width:33px">bc</div> </div>
马克java社区
2019/11/26
8780
javascript当中div在单行(float:left)用法
Flutter 流体滑块
在本文中,我们将**探讨Flutter中的Fluid Slider。**我们还将在flutter应用程序中使用flutter_fluid_slider包来实现流体滑块和属性的演示程序。
老孟Flutter
2021/05/11
11.7K0
Flutter 流体滑块
点击加载更多

相似问题

falcor:订阅模型更改?

126

单一集合继承还是多个集合?

15

将多个列表合并为单一列表格式

70

单一模型-多个过滤视图

23

如何将多个模型合并为一个模型?

167
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

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