【问题标题】:graphically array in tkinter在 tkinter 中以图形方式排列
【发布时间】:2018-11-07 17:31:34
【问题描述】:

我正在使用 Python 中的 GUI 开发一个名为 Linear and Binary search 的项目,我编写了一个函数来获取用户通过线性搜索算法给出的数组的索引号,但它不能正常工作,建议进行改进。

我还想以图形方式添加此算法的过程。 这是项目

模拟器,以图形方式显示线性和二进制搜索。该模拟器要求您选择数组的大小,然后以图形方式选择框的数量,然后您可以将数据插入这些框。它只允许您首先将数据插入第一个索引,然后它允许第二个框插入数据,依此类推。然后它会询问用户想要搜索哪些数据,并以图形方式显示搜索过程并最终显示结果。

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()

【问题讨论】:

  • “无法正常工作”是什么意思?你有错误吗?如果是这样,它们是什么?如果不是,它在做什么,它与你期望的有什么不同?
  • 算法不起作用我想要用户给出的 Number to Search 的数组索引..
  • 我想在这个程序中添加线性搜索和二分搜索,以便在 GUI 上获取输出

标签: python arrays python-3.x tkinter


【解决方案1】:

首先我要说的是,您对 Array 的使用非常混乱。 Array 是一种内置方法,因此您需要使用其他一些术语来表示您正在做的事情。我已经对您的代码进行了一些清理,并进行了一些必要的更改以从中获得我认为您正在寻找的功能。也就是说,请花时间阅读PEP8 风格指南。这将使其他人更容易阅读您的代码。

您的代码没有按照您的意愿执行的关键因素之一是您缺少snumbox_listglobal 语句。需要这 2 个才能让一切都做你想做的事。

接下来,您的linear() 函数中不需要return,因为您从按钮调用此函数,并且不能像这样使用返回的任何内容。

您的代码中有很多地方在实际不需要时将小部件分配给变量名称。我也清理了这些。

如果您有任何问题,请告诉我:

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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    • 1970-01-01
    • 2016-11-11
    • 1970-01-01
    • 2012-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多