Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中更改Tkinter文本框的宽度和高度?_Python_Button_Tkinter_Calculator - Fatal编程技术网

如何在Python中更改Tkinter文本框的宽度和高度?

如何在Python中更改Tkinter文本框的宽度和高度?,python,button,tkinter,calculator,Python,Button,Tkinter,Calculator,所以我一直在使用Tkinter在Python上开发计算器。但是,我想把按钮隔开,而不是直接放在一起。我不使用root.Frame函数。这是我的密码: from Tkinter import * master = Tk() display = Entry(master, width=46, justify='right', bd=1, bg='#eee5de', relief=RIDGE) master.title("Calculator | Coded by Mathieu") # ~C

所以我一直在使用Tkinter在Python上开发计算器。但是,我想把按钮隔开,而不是直接放在一起。我不使用
root.Frame
函数。这是我的密码:

from Tkinter import *

master = Tk()
display = Entry(master, width=46, justify='right', bd=1, bg='#eee5de', relief=RIDGE)

master.title("Calculator | Coded by Mathieu")


# ~Class~ #


class Calculator:
    def __init__(self):
        self.var1 = ""
        self.var2 = ""
        self.result = 0
        self.current = 0
        self.operator = 0

    def numb_butt(self, index):
        if self.current is 0:
            self.var1 = str(self.var1) + str(index)
            display.delete(0, END)
            display.insert(0, string=self.var1)
        else:
            self.var2 = str(self.var2) + str(index)
            display.delete(0, END)
            display.insert(0, string=self.var2)

    def equate(self):
        if self.operator is 0:
            self.result = float(self.var1) + float(self.var2)
        elif self.operator is 1:
            self.result = float(self.var1) - float(self.var2)
        elif self.operator is 2:
            self.result = float(self.var1) * float(self.var2)
        elif self.operator is 3:
            self.result = float(self.var1) / float(self.var2)
        display.delete(0, END)
        display.insert(0, string=self.result)

    def set_op(self, op):
        self.operator = op
        display.delete(0, END)
        if self.current is 0:
            self.current = 1
        else:
            self.equate()
            self.var2 = ""

    def clear(self):
        self.__init__()
        display.delete(0, END)


# ~Buttons~ #

calc = Calculator()

b0 = Button(master, text="0", command=lambda: calc.numb_butt(0), width=12, height=3, bd=2, relief=RAISED)
b1 = Button(master, text="1", command=lambda: calc.numb_butt(1), width=12, height=3, bd=2, relief=RAISED)
b2 = Button(master, text="2", command=lambda: calc.numb_butt(2), width=12, height=3, bd=2, relief=RAISED)
b3 = Button(master, text="3", command=lambda: calc.numb_butt(3), width=12, height=3, bd=2, relief=RAISED)
b4 = Button(master, text="4", command=lambda: calc.numb_butt(4), width=12, height=3, bd=2, relief=RAISED)
b5 = Button(master, text="5", command=lambda: calc.numb_butt(5), width=12, height=3, bd=2, relief=RAISED)
b6 = Button(master, text="6", command=lambda: calc.numb_butt(6), width=12, height=3, bd=2, relief=RAISED)
b7 = Button(master, text="7", command=lambda: calc.numb_butt(7), width=12, height=3, bd=2, relief=RAISED)
b8 = Button(master, text="8", command=lambda: calc.numb_butt(8), width=12, height=3, bd=2, relief=RAISED)
b9 = Button(master, text="9", command=lambda: calc.numb_butt(9), width=12, height=3, bd=2, relief=RAISED)
b_dot = Button(master, text=".", command=lambda: calc.numb_butt("."), width=12, height=3, bd=2, relief=RAISED)

plus = Button(master, text="+", command=lambda: calc.set_op(0), width=5, height=3, bd=2, relief=RAISED)
minus = Button(master, text="-", command=lambda: calc.set_op(1), width=5, height=3, bd=2, relief=RAISED)
times = Button(master, text="*", command=lambda: calc.set_op(2), width=5, height=3, bd=2, relief=RAISED)
divide = Button(master, text="/", command=lambda: calc.set_op(3), width=5, height=3, bd=2, relief=RAISED)

equals = Button(master, text="=", command=calc.equate, width=5, bd=2, relief=RAISED)
clear = Button(master, text="C", command=calc.clear, width=12, height=3, bd=2, relief=RAISED)

# ~Positioning~ #

display.place(x=0, y=2)
b7.grid(row=2, column=0)
b8.grid(row=2, column=1)
b9.grid(row=2, column=2)
b4.grid(row=3, column=0)
b5.grid(row=3, column=1)
b6.grid(row=3, column=2)
b1.grid(row=4, column=0)
b2.grid(row=4, column=1)
b3.grid(row=4, column=2)
b0.grid(row=5, column=0)

b_dot.grid(row=5, column=1)
clear.grid(row=5, column=2)

plus.grid(row=2, column=3)
minus.grid(row=3, column=3)
times.grid(row=4, column=3)
divide.grid(row=5, column=3)
equals.grid(row=1, column=3)

master.mainloop()

对于你的问题,有几个选择

最明显、最简单的解决方案是使用
padx
pady
配置选项

对于每一行,只需添加填充即可放置小部件:

拿这个来说:

b7.grid(row=2, column=0)
并添加padx,pady:

b7.grid(row=2, column=0, padx = 5, pady = 5)
另一个选项是使用place方法将每个按钮专门放置在彼此相隔几个像素的空间中,以提供所需的空间。但是,这不是首选方法,因为它将使代码在将来更难维护

不要使用
.grid()
而使用
.place()
并使用参数
x
y
: 此选项维护工作量大得多,应避免使用

您可以在填充配置中使用
.pack()
,但我认为在这里使用
.grid()
是最好的,您应该坚持使用

使用以下命令可以获得相同的布局,但带有填充

注意:我将您的编号改为使用网格而不是位置。您所需要做的就是定义列范围,这样它就不会更改其他小部件的位置

display.grid(row = 1, column = 0, columnspan = 3, padx = 5, pady = 5)
b7.grid(row=2, column=0, padx = 5, pady = 5)
b8.grid(row=2, column=1, padx = 5, pady = 5)
b9.grid(row=2, column=2, padx = 5, pady = 5)
b4.grid(row=3, column=0, padx = 5, pady = 5)
b5.grid(row=3, column=1, padx = 5, pady = 5)
b6.grid(row=3, column=2, padx = 5, pady = 5)
b1.grid(row=4, column=0, padx = 5, pady = 5)
b2.grid(row=4, column=1, padx = 5, pady = 5)
b3.grid(row=4, column=2, padx = 5, pady = 5)
b0.grid(row=5, column=0, padx = 5, pady = 5)

b_dot.grid(row=5, column=1, padx = 5, pady = 5)
clear.grid(row=5, column=2, padx = 5, pady = 5)

plus.grid(row=2, column=3, padx = 5, pady = 5)
minus.grid(row=3, column=3, padx = 5, pady = 5)
times.grid(row=4, column=3, padx = 5, pady = 5)
divide.grid(row=5, column=3, padx = 5, pady = 5)
equals.grid(row=1, column=3, padx = 5, pady = 5)

所以你想要填充物?