不能在内部使用几何管理器网格-需要使用.grid()而不是.pack()



不幸的是,我在这个问题上花了太多时间。下面是我的代码的简化版本;

class MyApp(Frame):

def createWidgets(self):     

btn_dir = Button(self, text = "Select Directory", command = self.MyDir)
start_date = Entry(self, width = 20)
end_date = Entry(self, width = 20)

btn_dir.grid(row = 0, column = 0)
start_date.grid(row = 1, column = 0)
end_date.grid(row = 2, column = 0)
self.work_dir = ''

def MyDir(self):
self.work_dir = askdirectory(title = 'Select Working Directory Folder')
myLabel = Label(text = self.work_dir)
#myLabel.pack()
myLabel.grid(row = 0, column = 1)


def error(self, date1, date2, path_1):
...... #something happens


def __init__(self, master): 
Frame.__init__(self, master)
self.pack()
self.createWidgets()

root = Tk()
app = MyApp(root)
app.mainloop()

我知道我不能在同一根窗口下拥有grid()pack(),我也理解这个问题是使用.pack()解决的,但是我希望该标签在特定位置grid(row = 0, column = 1)

如果能帮助我做这件事,我将不胜感激。

谢谢!

正如评论中提到的,您必须将每个小部件放置在框架内,因此您必须将self作为每个小部件的父级传递。您没有为Label传递self,因此出现错误。

def MyDir(self):
self.work_dir = askdirectory(title = 'Select Working Directory Folder')
myLabel = Label(self,text = self.work_dir) # Use self
myLabel.grid(row = 0, column = 1)

或者另一种解决方案是删除self.pack()并使用self.grid(row=0,column=0)代替。

最新更新