如何使用tkinter在GUI下创建?

时间:2019-04-10 23:20:19

标签: python xml tkinter

我是新手自学tkinter。我想实现我心目中的低于gui的目标。本gui的目的是比较两个相同结构化XML的标记值。我应该能够打开两个xml,并比较左右窗格网格值的标记值。总是左右的xml结构将保持一致,除了可能不同或缺失的值。

下面是我通过引用google和stackoverflow设法编写的代码。

broker1.xml

<?xml version="1.0" encoding="UTF-8"?>
<Broker>
    <object name="Books">
        <property name="name1"/>
        <property name="name2" value="value2"/>
        <property name="name3"/>
        <property name="name4"/>
        <property name="name5" value="value5"/>
    </object>
    <object name="furniture">
        <property name="furniture1"/>
        <property name="furniture2"/>
        <property name="furniture3" value="furniturevalue3"/>
    </object>
</Broker>

broker2.xml

<?xml version="1.0" encoding="UTF-8"?>
<Broker>
    <object name="Books">
        <property name="name1"/>
        <property name="name2"/>
        <property name="name3"/>
        <property name="name4" value="value4"/>
        <property name="name5" value="value5"/>
    </object>
    <object name="furniture">
        <property name="furniture1" value1="furniturevalue7"/>
        <property name="furniture2"/>
        <property name="furniture3" value="furniturevalue3"/>
    </object>
</Broker>

代码:

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

master = Tk()

HEIGHT = 700
WIDTH =  1024

canvas = Canvas(master,height= HEIGHT , width = WIDTH)
canvas.pack()

frame = Frame(master,bg = 'yellow')
frame.place(relwidth=1,relheight=1)

left = dict()  # dictionary to store name/value pairs of broker1.xml
right = dict() ## dictionary to store name/value pairs of broker2.xml

tree1 = ET.parse('broker1.xml')
#tree2 = ET.parse('broker2.xml') #yet to code for tree2 for comparision
broker = tree1.getroot()

for child in broker:
    if(child.tag == 'object'):
      for propertytag in child:
       print(propertytag)
       if(propertytag.tag == 'property'):
         print(propertytag.get('name'),propertytag.get('value'))
         left.update({propertytag.get('name'):propertytag.get('value')})

r=len(left)
valuesList    = list(left.values())

for key, value in left.items():
    entPropertyNameEntry = Entry(frame, readonlybackground='grey' , fg = 'black' , justify=LEFT,  width = len(max(left.keys(), key=len)),state='readonly')
    keyStringVar   = StringVar()
    keyStringVar.set(key)
    entPropertyNameEntry.config(textvariable=keyStringVar, relief=RIDGE)
    entPropertyNameEntry.grid(row=r,column=0)
    valueStringVar = StringVar()
    valueStringVar.set(value)
    entValueEntry= Entry(frame,readonlybackground='white', fg = 'black' , justify=LEFT, width = max(len(str(s)) for s in valuesList),state='readonly')
    entValueEntry.config(textvariable=valueStringVar, relief=SUNKEN)
    entValueEntry.grid(row=r,column=1)
    r = r - 1

master.mainloop()

我能够在2列中生成名称/值对,但无法实现根据字典长度进行调整的滚动。

布局示例:

enter image description here

0 个答案:

没有答案