[英]How to make a window with buttons in python
如何创建一个函数来创建一个带有两个按钮的窗口,其中每个按钮都有一个指定的字符串,如果单击,则返回一个指定的变量? 类似于此视频中的@ 3:05 https://www.khanacademy.org/science/computer-science-subject/computer-science/v/writing-a-simple-factorial-program---python-2 (我知道这是一个非常简单的初学者程序的教程,但它是我能找到的唯一视频)但没有文本框,而且我对“确定”和“取消”按钮的作用有更多的控制。
我是否必须创建一个窗口,在其中绘制一个带有字符串的矩形,然后创建一个循环来检查鼠标移动/鼠标点击,然后在鼠标坐标位于其中一个按钮内时返回一些东西,并且鼠标被点击了? 或者是否有一个功能/一组功能可以使带有按钮的窗口更容易? 还是模块?
概述
不,您不必“绘制矩形,然后进行循环”。 你将需要做的是进口某种形式的GUI工具包,并使用方法和对象的内置到该工具包。 一般来说,其中一种方法是运行一个循环,该循环侦听事件并根据这些事件调用函数。 这个循环称为事件循环。 因此,虽然必须运行这样的循环,但您不必创建循环。
注意事项
如果您希望从提示(例如您链接到的视频)中打开一个窗口,则问题会更棘手一些。 这些工具包并非旨在以这种方式使用。 通常,您编写一个完整的基于 GUI 的程序,其中所有输入和输出都通过小部件完成。 这并非不可能,但在我看来,学习时应该坚持使用所有文本或所有 GUI,而不是将两者混合。
使用 Tkinter 的示例
例如,一个这样的工具包是 tkinter。 Tkinter 是 Python 内置的工具包。 任何其他工具包(例如 wxPython、PyQT 等)都非常相似,并且也能正常工作。 Tkinter 的优势在于您可能已经拥有它,它是学习 GUI 编程的绝佳工具包。 这对于更高级的编程也很棒,尽管您会发现有人不同意这一点。 不要听他们的。
这是 Tkinter 中的一个示例。 此示例适用于 python 2.x。 对于 python 3.x,您需要从tkinter
而不是Tkinter
导入。
import Tkinter as tk
class Example(tk.Frame):
def __init__(self, parent):
tk.Frame.__init__(self, parent)
# create a prompt, an input box, an output label,
# and a button to do the computation
self.prompt = tk.Label(self, text="Enter a number:", anchor="w")
self.entry = tk.Entry(self)
self.submit = tk.Button(self, text="Submit", command = self.calculate)
self.output = tk.Label(self, text="")
# lay the widgets out on the screen.
self.prompt.pack(side="top", fill="x")
self.entry.pack(side="top", fill="x", padx=20)
self.output.pack(side="top", fill="x", expand=True)
self.submit.pack(side="right")
def calculate(self):
# get the value from the input widget, convert
# it to an int, and do a calculation
try:
i = int(self.entry.get())
result = "%s*2=%s" % (i, i*2)
except ValueError:
result = "Please enter digits only"
# set the output widget to have our result
self.output.configure(text=result)
# if this is run as a program (versus being imported),
# create a root window and an instance of our example,
# then start the event loop
if __name__ == "__main__":
root = tk.Tk()
Example(root).pack(fill="both", expand=True)
root.mainloop()
这是我的部分。 我正在制作一个人工智能聊天机器人,只是在登录和勾画东西的界面上工作。 我也是 .json 的初学者,所以这有助于我学习。
也许我也会解释一下。
首先,创建一个
.json
文件,命名为您喜欢的任何名称。 确保文件与代码位于同一目录路径/文件夹中,或者您可以导入 os 来执行此操作。
接下来导入 Tkinter。 它可能是也可能不是内置模块,但请尝试并查看。 还导入 JSON,时间不是必需的,但可以提供帮助。
import tkinter as tk
import json
import time
接下来,为所有这些发生创建一个窗口。 如有必要,编辑信息。
app = tk.Tk()
app.wm_title("Sign Up or Log in")
app.geometry("500x300")
如果需要,请添加标签。
k = tk.Label(text = "Hello there, I'm Lola! We'll talk soon. Just let me know your credentials!\nJust click on sign up below so that I can identify you!", justify="left")
k.pack()
添加一个按钮供用户单击。
sign_in = tk.Button(text="Sign Up or Log In", command=signin)
sign_in.pack()
我们需要为按钮定义上面使用的签名函数。 所以在我们创建按钮之前,我们先定义它。 有点长,所以我只解释一般部分。 在我们检查之前,我们首先获取他们的详细信息
def signin():
em = tk.Label(text="Email:")
em.pack()
en1 = tk.Entry(width=50)
en1.pack()
pa = tk.Label(text="Password:")
pa.pack()
en2 = tk.Entry(width=50)
en2.pack()
na = tk.Label(text="Name:")
na.pack()
en3 = tk.Entry(width=50)
en3.pack()
接下来,让我们定义提交函数并创建按钮。 这就是 json 的用武之地。我们首先获取详细信息并将它们存储在像这样的变量中。
def submit():
email = str(en1.get())
password = str(en2.get())
name = str(en3.get())
login = tk.Label(text="")
然后,我们不应该忘记先读取json文件
with open("info.json", "r") as f:
users = json.load(f)
现在让我们做检查
if email in users:
login.config(text="You already have an account! Click log in please!")
loginn = tk.Button(text = "Log in", command = login)
else:
users[email] = {}
users[email]["Password"] = password
users[email]["Name"] = name
with open("info.json", "w") as f:
json.dump(users, f)
login.config(text=f"You've successfully created an account. Just click on log in below! Credentials:\nEmail: {email}\nPassword: {password}\nName: {name}")
login.pack()
现在,我们将定义登录。 一切都非常相似
def loggin():
email = str(en1.get())
password = str(en2.get())
name = str(en3.get())
login = tk.Label(text="")
with open("info.json", "r") as f:
users = json.load(f)
if not email in users:
login.config(text="You don't have an account, sign up instead!")
else:
passs = users[email]["Password"]
if password != passs:
login.config(text="Wrong credentials. It doesn't match what I've recorded")
else:
login.config(text="Success! You've logged in. Please wait, as the software is still in the early stage of development.\nYou might have to sign up again later. I'll let you know soon.")
login.pack()
loginn = tk.Button(text = "Log in", command = loggin)
loginn.pack()
最后,这一行代码将确定是否一切正常。 确保将其放在最后的代码中。
window.mainloop()
这就是结束,请不要复制这个,我工作了 5 个小时来理解这一点。 我是一个初学者,就像其他人一样,但请不要复制此。 举个例子来理解。 即使你这样做,请给予信任。 但大多数情况下,不要。
#Creating a GUI for entering name
def xyz():
global a
print a.get()
from Tkinter import *
root=Tk() #It is just a holder
Label(root,text="ENter your name").grid(row=0,column=0) #Creating label
a=Entry(root) #creating entry box
a.grid(row=7,column=8)
Button(root,text="OK",command=xyz).grid(row=1,column=1)
root.mainloop() #important for closing th root=Tk()
这是最基本的。
tkinter 是一个 GUI 库,这段代码创建了简单的无文本按钮:
import tkinter as tk
class Callback:
def __init__(self, color):
self.color = color
def changeColor(self):
print('turn', self.color)
c1 = Callback('blue')
c2 = Callback('yellow')
B1 = tk.Button(command=c1.changeColor)
B2 = tk.Button(command=c2.changeColor)
B1.pack()
B2.pack()
这是我的方法,创建一个带有名为“Hello!”的按钮的窗口。 当它关闭时,一个新窗口打开,“酷!”
from tkinter import *
def hello(event):
print("Single Click, Button-l")
def Cool(event):
print("That's cool!")
widget = Button(None, text='Hello!')
widget.pack()
widget.bind('<Button-1>', Hello)
widget.mainloop()
widget = Button(None, text='Cool!')
widget.pack()
widget.bind('<Double-1>', Cool)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.