【问题标题】:Tkinter I want to delete a frame and replace it with anotherTkinter 我想删除一个框架并用另一个替换它
【发布时间】:2016-08-21 11:34:45
【问题描述】:

我最近开始学习 python,最近开始学习 Tkinter 模块。为了练习,我决定创建一个有点像 mySQL 工作台的窗口环境。一切都很好,直到我发现提交第二个查询实际上并没有删除前一个查询。 我的按钮回调代码如下:

def queryBtnCallBack():
    global query
    global queryEntry
    global resList
    global resFrame
    j=1
    #Delete frame before showing next data
    for widget in resFrame.winfo_children():
        widget.destroy()
    #For this one I also tried
    #if resFrame != None:
    #   resFrame.destroy()

    cursor = db.cursor()

    resFrame = Tkinter.Frame()
    #Check if user has given a correct input
    try:
        query = queryEntry.get()
        cursor.execute(query)
        data = cursor.fetchall()
    #Let user know if something is wrong
    except:
        errorQLabel = Tkinter.Label(resFrame, text='Error. Please make sure your query is correct', bg='#99b3e6')
        errorQLabel.grid(row=j+1, column=2)
        resFrame.configure(background='#99b3e6')
        resFrame.pack()
        return 

    for i in data:
        resList.append(i)

    #Query Results window part
    for i in range(len(resList)):
        j += 1
        resultLabel = Tkinter.Label(resFrame, text=resList[i], bg='#99b3e6')
        resultLabel.grid(row=j, column=2)

    resFrame.configure(background='#99b3e6')
    #Pack the results frame
    resFrame.pack()

我现在这样做的方式是删除框架,然后将下一个框架放在现在删除的框架之下。 任何形式的帮助将不胜感激。 提前谢谢你

【问题讨论】:

  • 也许你应该继承子窗口和父窗口的概念stackoverflow.com/questions/15306631/…
  • +1 用于使用新文本更新现有小部件,但要删除框架,请删除 resFrame。这将删除框架内的所有小部件,因此无需删除 wininfo_children 结果。所以从程序顶部的 resFrame=None 开始(不是函数),所以你有一个对象要在第一遍测试,它应该可以正常工作。
  • 代码中的注释说你试过resframe.destroy()。发生了什么?这看起来是正确的解决方案。

标签: python tkinter


【解决方案1】:

也许您正试图让这变得比它需要的更复杂。我建议只保留一个大标签并用新文本重新配置它以显示新数据,也许在数据中插入换行符以保持部分分开。要从条目小部件中删除之前的查询,只需执行 queryEntry.delete('0', 'end')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-31
    • 2018-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多