графически массив в ткинтер - PullRequest
0 голосов
/ 07 ноября 2018

Я работаю над проектом под названием «Линейный и бинарный поиск с графическим интерфейсом в Python», и я написал функцию для получения номера индекса массива, заданного пользователем с помощью алгоритма линейного поиска, но он не работает должным образом, предлагая улучшения.

Я также хочу добавить графическую обработку этого Algorthim. вот проект

Симулятор, графически отображающий линейный и двоичный поиск. Этот симулятор просит вас выбрать размер массива, затем графически это количество блоков, и вы можете затем вставить данные в эти блоки. Это позволяет только сначала вставлять данные в первый индекс, а затем позволяет второму блоку вставлять данные и т. Д. Затем он спрашивает пользователя, какие данные хотят найти, и графически показывает процесс поиска и, наконец, отображает результат.

import tkinter as tk

root=tk.Tk()
root.title("Linear Search")
root.geometry("1200x600")

def Linear():
    x=root.snum.get()
    for i in range(len(box_list)):
        if box_list[i]==x:
            return i
    return -1
    result=tk.Label(root,text=i)
    result.pack()

def ApplytoLabel():
    xx=size.get()
    for i in range(xx):
        element = box_list[i].get() 
        ArrayLabel=tk.Label(root,text="Array Element: " + element,font="Arial 12 bold",bg="red",fg="white",bd="5")
        ArrayLabel.pack(side="left")

        #Search Element
    text2=tk.Label(root,text="Number to search:",
                   font="Arial 10 bold",fg="blue",pady="10",anchor="w")
    text2.pack(side="left")

    snum=tk.IntVar()

    SearchNum=tk.Entry(root,textvariable=snum)
    SearchNum.pack(side="left")

    LinearSearch=tk.Button(root,text="Linear Search",command=Linear)
    LinearSearch.pack(side="left")

box_list = []   

def Boxes():
    xx=size.get()
    for i in range(xx):        
        box=tk.Entry(root,font="Arial 10 bold",bd="5",width="5")
        box.pack(side="left")
        box_list.append(box)    
    ApplytoLabel1=tk.Button(root,text="Submit To Array",command=ApplytoLabel)
    ApplytoLabel1.pack(side="left")



Array = tk.Frame(root)
Array.pack()

text1=tk.Label(Array,text="Enter the Size of Array:",
               font="Arial 10 bold",fg="blue")
text1.pack()

size=tk.IntVar()

ArraySize=tk.Entry(Array,textvariable=size)
ArraySize.pack()

SizeofArray=tk.Button(Array,text="Submit",command=Boxes)
SizeofArray.pack()



root.mainloop()

1 Ответ

0 голосов
/ 07 ноября 2018

Сначала я должен сказать, что использование Array очень запутанно. Array - это встроенный метод, поэтому вам нужно использовать некоторую другую терминологию для того, что вы делаете. Я немного почистил ваш код и внес несколько необходимых изменений, чтобы получить функциональность, которая, я думаю, вы ищете. Тем не менее, пожалуйста, найдите время, чтобы прочитать руководство по стилю PEP8 . Другим будет намного проще читать ваш код.

Один из ключевых факторов, почему ваш код не выполняет то, что вы хотите, - вы пропускаете global операторов для snum и box_list. Эти 2 понадобятся, чтобы заставить все делать то, что вы хотите.

Далее вам не нужно return в вашей функции linear(), так как вы вызываете эту функцию с помощью кнопки, и ничто не может быть возвращено.

В вашем коде есть много мест, где вы назначаете виджеты для имени переменной, когда оно на самом деле не нужно. Я тоже их почистил.

Дайте мне знать, если у вас есть какие-либо вопросы:

import tkinter as tk


root = tk.Tk()
root.title("Linear Search")
root.geometry("1200x600")
box_list = []   

def linear():
    index_list = []
    global snum, box_list
    x = snum.get()
    for i in range(len(box_list)):
        if box_list[i].get() == str(x):
            index_list.append(i)
    print(index_list)
    tk.Label(root, text=index_list).pack()

def applyto_label():
    global snum, box_list
    xx = size.get()
    for i in range(xx):
        tk.Label(root, text="Array Element: {}".format(box_list[i].get() ),
                 font="Arial 12 bold", bg="red", fg="white", bd="5").pack(side="left")

    tk.Label(root,text="Number to search:", font="Arial 10 bold",
             fg="blue", pady="10", anchor="w").pack(side="left")
    snum = tk.IntVar()
    tk.Entry(root, textvariable=snum).pack(side="left")
    tk.Button(root,text="Linear Search",command=linear).pack(side="left")

def Boxes():
    global snum, box_list
    xx = size.get()
    for _ in range(xx):        
        box_list.append(tk.Entry(root, font="Arial 10 bold", bd="5", width="5"))
        box_list[-1].pack(side="left")
    tk.Button(root ,text="Submit To Array", command=applyto_label).pack(side="left")

arr_frame = tk.Frame(root)
arr_frame.pack()
tk.Label(arr_frame, text="Enter the Size of Array:", font="Arial 10 bold", fg="blue").pack()
size = tk.IntVar()
array_size = tk.Entry(arr_frame, textvariable=size)
array_size.pack()
tk.Button(arr_frame, text="Submit", command=Boxes).pack()

root.mainloop()

enter image description here

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