【问题标题】:How do I align frames in tkinter python?如何在 tkinter python 中对齐帧?
【发布时间】:2017-04-25 09:15:44
【问题描述】:

我已尝试对齐以下条目小部件,但它不起作用。当我没有将它放入框架时,我能够正确对齐它,但现在它没有正确对齐。之前它位于左侧,标签位于输入框旁边,但现在它位于顶部中心。我试图改变坐标,但它不起作用。我希望能够像以前一样在左侧对齐它,因为我会在右侧放置其他东西。

def userinput():

        #first
        frame=Frame(root)
        frame.place(x=55,y=50)
        frame.pack()
        L1=Label(frame,text="1",font=("calibri"))
        L1.place(x=55,y=50)
        L1.pack()

        frame1=Frame(root)
        frame1.place(x=70,y=50)
        frame1.pack()
        E1 = tk.Entry(frame1, width=30, bd=4)
        E1.pack()
        E1.bind('<Return>', lambda event, arg=(0): answer(event, arg))

        #second
        frame2=Frame(root)
        frame2.place(x=55,y=80)
        frame2.pack()
        L2 = Label(frame2,text="2",font=("calibri"))
        L2.pack()

        frame3=Frame(root)
        frame3.place(x=70,y=80)
        frame3.pack()
        E2 = tk.Entry(frame3,width=30, bd=4)
        E2.pack()
        E2.bind('<Return>', lambda event, arg=(1): answer(event, arg))

        #third
        frame4=Frame(root)
        frame4.place(x=55,y=110)
        frame4.pack()
        L3 = Label(frame4,text="3",font=("calibri"))
        L3.pack()

        frame5=Frame(root)
        frame5.place(x=70,y=110)
        frame5.pack()
        E3 = tk.Entry(frame5, width=30,bd=4)
        E3.pack()
        E3.bind('<Return>', lambda event, arg=(2): answer(event, arg))

【问题讨论】:

    标签: python python-3.x tkinter


    【解决方案1】:

    这就是你要找的吗?

    class UI(Frame):
        def __init__(self, parent):
            self.parent = parent
            Frame.__init__(self, parent)
            self.create_widgets(parent)
    
        def create_widgets(self, root):
            #first
            f1 = Frame(root)
            e1 = Entry(f1, width=30, bd=4)
            l1 = Label(f1, text="1")
            e1.grid(row=0, column=0)
            l1.grid(row=0, column=1)
            f1.grid()
            #second
            f2 = Frame(root)
            e2 = Entry(f2, width=30, bd=4)
            l2 = Label(f2, text="2")
            e2.grid(row=0, column=0)
            l2.grid(row=0, column=1)
            f2.grid()
            #third
            self.s1 = IntVar()
            self.s1.set(3)
            f3 = Frame(root)
            e3 = Entry(f3, width=30, bd=4)
            l3 = Label(f3, textvariable=s1)
            e3.grid(row=0, column=0)
            l3.grid(row=0, column=1)
            f3.grid()
    
       def set_score(self, score):
           self.s1.set(score)
    
    def test_ui():
        root = Tk()
        app = UI(root)
        app.set_score(4)
        app.mainloop()
    
    test_ui()
    

    我发现对小部件进行网格化比打包它们要简单得多。

    【讨论】:

    • 嘿,我有一个问题,我收到此错误:回溯(最近一次通话最后一次):文件“C:\用户\名称\桌面\便携式Python 3.2.5.1\应用\lib\tkinter_init_.py”,第 1456 行,在 call 中返回 self.func(*args) 文件“”,第 248 行,在 文件“”中,第 260 行,回答 TypeError: unsupported operand type(s) for +=: 'IntVar' and 'int' when I try to put this code: def scoreboard(): global score score = IntVar() scoreupdate = tk.Label (root, textvariable=score).pack() score.set(score.get()) scoreboard() 更新分数,但它仍然是 0
    • @Arielle 我认为这应该是一个单独的问题。如果 score 是全局的,为什么要声明为新的 IntVar() 实例(默认为 0),然后将其分配给 Label(作为 0),然后再次获取并设置它(作为 0)。全局分数变量是否有可能在您的代码中的某处用作整数,如果您在 scoreboard() 中重新定义它,它会混淆为现在是 IntVar()?
    • 是的,没错。它将它设置为 0,我只是想显示分数的更新,但我不知道该怎么做。
    • @Arielle 我编辑了我的答案,让您知道我将如何做到这一点。
    • 谢谢你,但我现在明白了。我现在明白为什么我会出错,这是因为 intvar() 给了我一个对象而不是一个 int。问题是我 5 天不能提问,因为我的问题被否决了,我可能需要稍后再提问,如果我愿意,请问您有联系方式吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-12
    • 2019-03-08
    相关资源
    最近更新 更多