出现在其父母之外的Tkinter框架

时间:2018-03-08 01:59:59

标签: python tkinter tkinter-layout

我试图在其父框架内标记一个标签,但它显示在窗口的底部,我无处可以认为甚至与我告诉它去的地方有关。 这是我的代码:

class Window:
def __init__(self, root):
    #configure the window as root
    self.root = root

    #create a canvas
    self.canvas = Canvas(self.root, bg="white", width=500, height=300).grid(row=0, column=0, rowspan=2)

    #create two frames to the right of the canvas for entering letters and displaying wrong guesses
    self.wrong_guess_frame = Frame(self.root, bg="red", width=150, height=150).grid(row=0, column=1)
    self.entry_frame = Frame(self.root, bg="green", width=150, height=150).grid(row=1, column=1)

    #create a title label for the wrong answers and a frame in which to sit it
    self.wrngguess_title_frame = Frame(self.wrong_guess_frame, bg="blue",width = 100).grid()
    self.wrngguess_title = Label(self.wrong_guess_frame, text="Wrong Guesses:").grid()

最后两行是我遇到的麻烦。 self.wrngguess_title不会显示在wrong_guess_frame中,而是显示在窗口底部,我无法弄清楚导致该问题的原因。

任何帮助将不胜感激。 TIA

2 个答案:

答案 0 :(得分:1)

main()不引用任何框架;此变量实际上是self.wrong_guess_frame,是您在创建框架后应用于框架的None方法的返回值。 .grid()作为任何窗口构造函数的第一个参数,被解释为对根窗口的引用。

如果你想要一个变量引用小部件,你必须将小部件创建和网格/包作为两个单独的语句:

None

答案 1 :(得分:0)

似乎根据您在问题中指定的内容,您需要做的就是将rowcolumn指定为与框架相同,如下所示:

    self.wrngguess_title = Label(self.wrong_guess_frame, text="Wrong Guesses:").grid(row=0, column=1)
    self.wrngguess_title_frame = Frame(self.wrong_guess_frame, bg="blue",width = 100).grid(row=0, column=1)

前面的代码产生以下结果: Result

但是如果你想稍微向下移动一行,请使用以下代码段:

self.wrngguess_title_frame = Frame(self.wrong_guess_frame, bg="blue",width = 100).grid(row=0, column=1, pady=(25,10))

产生此结果:Result

希望能帮到你。这就是我从你的问题中推断出你想要的东西。