python3 tkinter gui没有回应

时间:2016-06-14 02:03:48

标签: python macos python-3.x user-interface tkinter

嗨,我是编程新手,如果这是一个明显的错误,我道歉。我在Mac OsX El Capitan上使用python 3.5在tkinter上写了一个gui。这是迄今为止的代码:

from tkinter import *
from tkinter import ttk



class GUI(object):
    def __init__(self, master):
        master.title("Title")
        master.resizable(False, False)
        self.frame1 = ttk.Frame(master)
        self.frame1.pack()

        ttk.Label(text="Organism").grid(row=1, column=0)

        self.organism_picker = ttk.Combobox(self.frame1, values=("Drosophila     melanogaster",
                                                             "Danio rerio",
                                                             "Caenorhabditis     elegans",
                                                             "Rattus     norvegicus",
                                                             "Mus musculus",
                                                             "Homo sapiens"))  
        self.organism_picker.grid(row=2, column=0)

        ttk.Label(text="Core gene symbol:").grid(row=3, column=0)

        self.core = ttk.Entry(self.frame1)
        self.core.grid(row=4, column=0)


root = Tk()
gui = GUI(root)
root.mainloop()

当我运行此程序时,程序进入主循环,但gui窗口永远不会出现且启动器没有响应。 我尝试重新安装python 3,安装了ActiveTcl,尝试使用ActivePython。但它没有奏效。

提前感谢大家的答案。

2 个答案:

答案 0 :(得分:3)

您不应该使用pack()和grid(),因为这将生成几何管理器冲突,如此错误所述:

_tkinter.TclError: cannot use geometry manager grid inside . which already has slaves managed by pack

尝试改变:

 self.frame1.pack()

为:

 self.frame1.grid()

在这种情况下,我建议使用pack整体,因为这是一个相当简单的布局。请参阅this guide

  

何时使用包管理器

     

与网格管理器相比,包管理器有点受限,   但是在一些但很常见的情况下使用起来要容易得多:

     

将小部件放在框架(或任何其他容器小部件)中,并且具有   它填满整个框架在每个框架的顶部放置一些小部件   其他并排放置一些小部件

最后:

  

注意:请勿在同一主窗口中混合网格和打包。 Tkinter会   愉快地度过余生,试图协商解决方案   两位经理都很满意。而不是等待,杀死   应用程序,再看看你的代码。一个常见的错误是   为某些小部件使用错误的父级。

答案 1 :(得分:1)

您的代码唯一的问题是您忘记两个标签附加到主要小部件self.frame1

要解决此问题,请按以下步骤进行修改:

#Attach the 2 labels to self.frame1
ttk.Label(self.frame1,text="Organism").grid(row=1, column=0) 
ttk.Label(self.frame1,text="Core gene symbol:").grid(row=3, column=0)

演示

完成后,你会得到这个:

enter image description here