Как создать ниже GUI с tkinter? - PullRequest
0 голосов
/ 11 апреля 2019

Я новичок, самообучающийся, Ткинтер. Я хочу достичь ниже 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...