使用多个功能按钮创建GUI

时间:2017-10-16 15:11:12

标签: python tkinter

我正在尝试创建一个GUI,如附图所示

enter image description here

我编写了以下代码来完成工作但不是我需要它的方式。

try:
    import Tkinter as tk
    import tkMessageBox as mb
except ImportError:
    import tkinter as tk
    import tkinter.messagebox as mb

root = tk.Tk()
root.geometry("500x300")

tk.Label(root, text="Python First GUI Template", bg="goldenrod", font="bold").pack()
tk.Label(root, text="").pack()

def addFn():
    a = int(input('enter first number'))
    b = int(input('enter second number'))
    mb.showinfo('showinfo', a+b)

def subtractFn():
    a = int(input('enter first number'))
    b = int(input('enter second number'))
    mb.showinfo('showinfo', a - b)

tk.Button(root, text="Add Function", bg="SkyBlue1", command=addFn).pack()
tk.Label(root, text="").pack()
tk.Button(root, text="Subtract Function", bg="SkyBlue1", command=subtractFn).pack()

root.mainloop()

所以,我有以下问题:

(1)我无法在附加图片中根据“添加”和“减去”按钮的相对颜色和相对位置创建设计。

(2)当我点击按钮激活“添加”或“减去”功能时,控制台上需要输入。我需要弹出一个输入框,然后下拉两个我要添加的数字。我正在寻找“添加”功能的以下格式。

enter image description here

(3)我想在完成后添加一个“退出”按钮来关闭控制台

2 个答案:

答案 0 :(得分:2)

我自己也是新手,很遗憾无法解答大部分问题,但对于退出按钮,我认为你可以编写一个调用quit()的函数,只是就像你要输入以退出Python交互式解释器一样。然后将该功能链接到按钮,就像前两个按钮一样。这与lambda表达式的想法相同:

from tkinter import *

root =Tk()
root.geometry("500x300")

Button(root,text="QUIT",bg='Red',command=lambda:(quit())).pack(side=BOTTOM)

root.mainloop()

这是一个TKinter框架,底部为您提供一个红色退出按钮,其唯一的存在理由是退出它所在的框架。

关于布局,我认为pack方法要求你指明包装应该放置小部件的位置,但不能给你很多绝对控制。不会网格方法允许更好的对齐吗?

为什么输入框必须弹出?为什么他们不能嵌入到应用程序框架中?我认为这会消除这个问题的一些困难,不是吗?

对不起,这不是最有帮助的答案......但是我希望它会给你一些合作的东西,直到有更多知识渊博的人发生。干杯。

答案 1 :(得分:1)

有两种方法可以做到这一点,最简单的方法是使用.grid()代替.pack()

from tkinter import *

root = Tk()

title = Label(root, text="Python First GUI Template")
add = Button(root, text="Add")
subtract = Button(root, text="Subtract")
_quit = Button(root, text="Quit")

title.grid(row=0, column=1, padx=5, pady=5)
add.grid(row=1, column=0, padx=5, pady=5)
subtract.grid(row=1, column=2, padx=5, pady=5)
_quit.grid(row=2, column=3, padx=5, pady=5)

root.mainloop()

.grid()允许您以网格方式在窗口上放置小部件,想象您将每个小部件放入的单元格,而.pack()默认情况下会将项目堆叠在彼此的顶部,除非某些属性是给定的值。

您还可以使用.place(),它允许您根据坐标放置小部件,但这需要更多的努力来响应窗口大小更改或添加新的小部件等。

另外,Stack Overflow不是免费的编程资源,我们不会根据需求列表为您编写程序。有很多自由职业程序员乐于换取金钱。我建议将来不要问一个关于Stack Overflow上有超过17000个问题的难以置信的文档库的问题,其中很多是关于三个几何管理器的差异,而是找到一个教程或问一个同事,同学,老师或朋友寻求帮助。