从Tkinter中的Entry小部件将参数传递给动态创建的Button

史蒂夫·吉特

我正在寻找一种方法,如何将条目小部件的内容传递给按钮。对我来说,最复杂的部分是从给定的XML结构动态创建的按钮和输入小部件,请参见“ xmlString”,它描述了具有按钮和参数的GUI,按钮和参数的数量是可变的。

我简化了XML并制作了演示代码。我知道了lambda函数,但是我不知道如何使用动态创建的条目窗口小部件执行此操作。

from Tkinter import *
import xml.etree.ElementTree as ET


rootframe = Tk()

def runScript(text = 'default text'):
    print 'runScript %s'%text

xmlString = '''
<window>
      <Tab id="tabpage5" name="Debugging" type="custom">
        <command dest="1" mode="CONFIG" unit="4" id="SET_TIMEOUT" type="COMMAND">
          <initiator name="Set Timeout" type="button" />
          <parameter editable="true" param_name="PARAM1">31536000</parameter>
        </command>
        <command dest="1" mode="CONFIG" unit="4" id="SET_thing" type="COMMAND">
          <initiator name="Set Timeout" type="button" />
          <parameter param_name="PARAM1" >31536000</parameter>
          <parameter param_name="PARAM2">5</parameter>
        </command>
        <command />
        </Tab>        
</window>
'''

xmlRoot  = ET.fromstring(xmlString)

for tab in xmlRoot.iter('Tab'):
    row = 0
    column = 0

    for command in tab.iter('command'):
        for tag in command.iter() :
            #not sure why command tag is here but skipping it
            if tag.tag == 'command':
                pass
                continue
            if tag.tag == 'initiator' and tag.attrib['type'] == 'button':
                    button = Button(rootframe, text=tag.attrib['name'], command=lambda : runScript('nondefault text'))
                    button.grid(row=row, column=column, sticky='w')
                    column +=1
            elif tag.tag == 'parameter':
                    entry = Entry(rootframe)
                    entry.insert(0,tag.text)
                    entry.grid(row=row, column=column)
                    column +=1
        row +=1
        column = 0

rootframe.mainloop()
凯文

您可以保留所有创建条目的2D列表。然后,当您要访问它们时,只需插入行号。实施示例:

from Tkinter import *
import xml.etree.ElementTree as ET


rootframe = Tk()

def runScript(text = 'default text', row=None):
    entries = entries_by_row[row] if row is not None else []
    print 'runScript {}. Contents of entries: {}'.format(text, [entry.get() for entry in entries])

xmlString = '''
<window>
      <Tab id="tabpage5" name="Debugging" type="custom">
        <command dest="1" mode="CONFIG" unit="4" id="SET_TIMEOUT" type="COMMAND">
          <initiator name="Set Timeout" type="button" />
          <parameter editable="true" param_name="PARAM1">31536000</parameter>
        </command>
        <command dest="1" mode="CONFIG" unit="4" id="SET_thing" type="COMMAND">
          <initiator name="Set Timeout" type="button" />
          <parameter param_name="PARAM1" >31536000</parameter>
          <parameter param_name="PARAM2">5</parameter>
        </command>
        <command />
        </Tab>        
</window>
'''

xmlRoot  = ET.fromstring(xmlString)

entries_by_row = []

for tab in xmlRoot.iter('Tab'):
    row = 0
    column = 0

    for command in tab.iter('command'):
        entries_by_row.append([])
        for tag in command.iter() :
            #not sure why command tag is here but skipping it
            if tag.tag == 'command':
                pass
                continue
            if tag.tag == 'initiator' and tag.attrib['type'] == 'button':
                    button = Button(rootframe, text=tag.attrib['name'], command=lambda row=row: runScript('nondefault text', row))
                    button.grid(row=row, column=column, sticky='w')
                    column +=1
            elif tag.tag == 'parameter':
                    entry = Entry(rootframe)
                    entry.insert(0,tag.text)
                    entry.grid(row=row, column=column)
                    column +=1
                    entries_by_row[-1].append(entry)
        row +=1
        column = 0

rootframe.mainloop()

单击每个按钮后的结果:

runScript nondefault text. Contents of entries: ['31536000']
runScript nondefault text. Contents of entries: ['31536000', '5']

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将参数传递给QStackedWidget中的小部件的构造函数

来自分类Dev

将参数传递给Flutter中的无状态小部件

来自分类Dev

在Tkinter中动态设置Entry小部件值

来自分类Dev

如何将参数传递给小部件js资产?

来自分类Dev

durandal,在导航期间将参数传递给小部件

来自分类Dev

durandal,在导航期间将参数传递给小部件

来自分类Dev

如何将参数传递给DOJO中的自定义小部件?

来自分类Dev

在Python中,如何获取动态创建的Entry小部件的值

来自分类Dev

如何创建对象列表以传递给Flutter中的小部件?

来自分类Dev

Tkinter-创建动态条目小部件

来自分类Dev

Tkinter 从按钮动态创建小部件

来自分类Dev

在Tkinter的弹出窗口中动态创建Entry窗口小部件时出现问题

来自分类Dev

动态创建凿子中的模块,同时将动态参数传递给那些模块

来自分类Dev

如何在 tkinter 按钮小部件中获取 text 参数的值,然后将该值作为参数传递给同一个按钮?

来自分类Dev

将lambda函数绑定到使用For循环创建的多个Tkinter Entry小部件

来自分类Dev

如何根据用户输入在 tkinter 中创建动态条目小部件并将这些条目小部件的输入存储在列表中

来自分类Dev

如何以Python方式将参数传递给子类化小部件的方法?

来自分类Dev

通过Tkinter中的Button将参数传递给函数,循环中出现starnge行为

来自分类Dev

ruby /将参数传递给动态创建的类

来自分类Dev

在SLOT的参数中传递小部件

来自分类Dev

将动态参数传递给PHP中的函数(非参数)

来自分类Dev

在Sitefinity中动态创建窗口小部件

来自分类Dev

在Sitefinity中动态创建窗口小部件

来自分类Dev

如何根据在ttk.entry框中输入的值动态创建ttk小部件?

来自分类Dev

如何在类构造函数参数中动态传递窗口小部件

来自分类Dev

QTest无法将事件传递给子窗口小部件

来自分类Dev

将API(模型类)传递给小部件

来自分类Dev

将变量索引传递给Flutter小部件

来自分类Dev

QTest无法将事件传递给子窗口小部件

Related 相关文章

  1. 1

    将参数传递给QStackedWidget中的小部件的构造函数

  2. 2

    将参数传递给Flutter中的无状态小部件

  3. 3

    在Tkinter中动态设置Entry小部件值

  4. 4

    如何将参数传递给小部件js资产?

  5. 5

    durandal,在导航期间将参数传递给小部件

  6. 6

    durandal,在导航期间将参数传递给小部件

  7. 7

    如何将参数传递给DOJO中的自定义小部件?

  8. 8

    在Python中,如何获取动态创建的Entry小部件的值

  9. 9

    如何创建对象列表以传递给Flutter中的小部件?

  10. 10

    Tkinter-创建动态条目小部件

  11. 11

    Tkinter 从按钮动态创建小部件

  12. 12

    在Tkinter的弹出窗口中动态创建Entry窗口小部件时出现问题

  13. 13

    动态创建凿子中的模块,同时将动态参数传递给那些模块

  14. 14

    如何在 tkinter 按钮小部件中获取 text 参数的值,然后将该值作为参数传递给同一个按钮?

  15. 15

    将lambda函数绑定到使用For循环创建的多个Tkinter Entry小部件

  16. 16

    如何根据用户输入在 tkinter 中创建动态条目小部件并将这些条目小部件的输入存储在列表中

  17. 17

    如何以Python方式将参数传递给子类化小部件的方法?

  18. 18

    通过Tkinter中的Button将参数传递给函数,循环中出现starnge行为

  19. 19

    ruby /将参数传递给动态创建的类

  20. 20

    在SLOT的参数中传递小部件

  21. 21

    将动态参数传递给PHP中的函数(非参数)

  22. 22

    在Sitefinity中动态创建窗口小部件

  23. 23

    在Sitefinity中动态创建窗口小部件

  24. 24

    如何根据在ttk.entry框中输入的值动态创建ttk小部件?

  25. 25

    如何在类构造函数参数中动态传递窗口小部件

  26. 26

    QTest无法将事件传递给子窗口小部件

  27. 27

    将API(模型类)传递给小部件

  28. 28

    将变量索引传递给Flutter小部件

  29. 29

    QTest无法将事件传递给子窗口小部件

热门标签

归档