如何将我的 python 逻辑应用到 tkinter GUI?这是一个简单的 GET 请求程序
Posted
技术标签:
【中文标题】如何将我的 python 逻辑应用到 tkinter GUI?这是一个简单的 GET 请求程序【英文标题】:How can i apply my python logic into the tkinter GUI? It's a simple GET request program 【发布时间】:2021-01-14 14:09:09 【问题描述】:我正在尝试制作一个发送短信的程序。我唯一的问题是我不能让它用 tkinter 做事。抱歉,如果这听起来令人困惑,英语不是我的第一语言,我会尽力解释。
这是一个通过我的 API 发送 SMS 文本的简单 GET 请求:
# GET
import requests
to = input("Enter Receiver: ")
fromm = input("Enter Sender: ")
message = input("Enter Message: ")
payload = 'to': to, 'from': fromm, 'message': message, 'email': '@example.com', 'api_secret': '123456789abcdefg'
r = requests.get('https://example.com/dashboard/api',params=payload)
print(r.text)
发送此 Get 请求后,我们会收到确认消息已发送的 json 响应。
这是我使用 tkinter 的 GUI 的样子:
from tkinter import *
def send_message():
print('sent')
def clear_text():
print('cleared')
#window object
app = Tk()
# Sender
Sender_text = StringVar()
Sender_label = Label(app, text='Sender', font=('bold', 14), pady=20)
Sender_label.grid(row=0, column=0, sticky=W)
Sender_entry = Entry(app, textvariable=Sender_text)
Sender_entry.grid(row=0, column=1)
# Receiver
Receiver_text = StringVar()
Receiver_label = Label(app, text='Receiver', font=('bold', 14))
Receiver_label.grid(row=0, column=2, sticky=W)
Receiver_entry = Entry(app, textvariable=Receiver_text)
Receiver_entry.grid(row=0, column=3)
# Message
Message_text = StringVar()
Message_label = Label(app, text='Message', font=('bold', 14))
Message_label.grid(row=1, column=0, sticky=W)
Message_entry = Entry(app, textvariable=Message_text)
Message_entry.grid(row=1, column=1)
# Buttons
send_btn = Button(app, text='Send', width=12, command=send_message)
send_btn.grid(row=2, column=0, pady=20)
clear_btn = Button(app, text='Clear', width=12, command=clear_text)
clear_btn.grid(row=2, column=1)
app.title('SMS')
app.geometry('430x145')
#start
app.mainloop()
我花了大约两个小时来学习如何制作 GUI,但现在我只是迷路了。我对如何将逻辑实现到 GUI 中没有实际的想法。 我如何使文本和按钮工作?我在哪里添加功能? 我真的迷路了。
非常感谢您的帮助。
【问题讨论】:
听起来你会从关于 tkinter 的指南或教程中受益最多。 只需将to = input(...)
替换为to = Receiver_text.get()
(同样适用于from
和message
)。将修改后的代码放入send_message()
函数中。
我试过但失败了。 :(
错误是什么?
嘿,谢谢!我设法应用了第一步,但我不确定如何将修改后的代码放入 send_message() 中。我的语法真的很糟糕
【参考方案1】:
参考您的 GUI,让我们为您的代码提供更多结构,以便更清楚地看到正在发生的事情。
我已将窗口的设置放在函数my_window
中,将来自main
的参数app
传递给它。按下按钮send
,通过sender_text.get()
、receiver_text.get()
等获取sender_text
、receiver_text
和message_text
的值。将这些结果通过@传递给函数send_message
987654331@函数。
from tkinter import Tk, StringVar, Label, Entry, Button, W
def send_message(snd_txt, rcv_txt, msg_txt):
print(f'sent: snd_txt, rcv_txt, msg_txt')
def clear_text():
print('cleared')
def my_window(app):
# Sender
sender_text = StringVar()
sender_label = Label(app, text='Sender', font=('bold', 14), pady=20)
sender_label.grid(row=0, column=0, sticky=W)
sender_entry = Entry(app, textvariable=sender_text)
sender_entry.grid(row=0, column=1)
# Receiver
receiver_text = StringVar()
receiver_label = Label(app, text='Receiver', font=('bold', 14))
receiver_label.grid(row=0, column=2, sticky=W)
receiver_entry = Entry(app, textvariable=receiver_text)
receiver_entry.grid(row=0, column=3)
# Message
message_text = StringVar()
message_label = Label(app, text='Message', font=('bold', 14))
message_label.grid(row=1, column=0, sticky=W)
message_entry = Entry(app, textvariable=message_text)
message_entry.grid(row=1, column=1)
# Buttons
send_btn = Button(
app, text='Send', width=12,
command=lambda: send_message(sender_text.get(), receiver_text.get(), message_text.get()))
send_btn.grid(row=2, column=0, pady=20)
clear_btn = Button(app, text='Clear', width=12, command=clear_text)
clear_btn.grid(row=2, column=1)
def main():
app = Tk()
app.title('SMS')
app.geometry('430x145')
my_window(app)
app.mainloop()
if __name__ == '__main__':
main()
不过,更常见的做法是将my_window
定义为class
,并将函数clear_text
和send_message
定义为class
,这提供了更多的灵活性。
from tkinter import Tk, StringVar, Label, Entry, Button, W
class my_window:
def __init__(self, app):
# Sender
self.sender_text = StringVar()
sender_label = Label(app, text='Sender', font=('bold', 14), pady=20)
sender_label.grid(row=0, column=0, sticky=W)
sender_entry = Entry(app, textvariable=self.sender_text)
sender_entry.grid(row=0, column=1)
# Receiver
self.receiver_text = StringVar()
receiver_label = Label(app, text='Receiver', font=('bold', 14))
receiver_label.grid(row=0, column=2, sticky=W)
receiver_entry = Entry(app, textvariable=self.receiver_text)
receiver_entry.grid(row=0, column=3)
# Message
self.message_text = StringVar()
message_label = Label(app, text='Message', font=('bold', 14))
message_label.grid(row=1, column=0, sticky=W)
message_entry = Entry(app, textvariable=self.message_text)
message_entry.grid(row=1, column=1)
# Buttons
send_btn = Button(app, text='Send', width=12, command=self.send_message)
send_btn.grid(row=2, column=0, pady=20)
clear_btn = Button(app, text='Clear', width=12, command=self.clear_text)
clear_btn.grid(row=2, column=1)
def send_message(self):
print(f'sent: self.sender_text.get(), '
f'self.receiver_text.get(), '
f'self.message_text.get()')
def clear_text(self):
self.sender_text.set('')
self.receiver_text.set('')
self.message_text.set('')
print('cleared')
def main():
app = Tk()
app.title('SMS')
app.geometry('430x145')
my_window(app)
app.mainloop()
if __name__ == '__main__':
main()
【讨论】:
【参考方案2】:您可以简单地将逻辑(将所有input()
替换为xxx.get()
)放入函数send_message()
:
import requests
def send_message():
receiver = Receiver_text.get()
sender = Sender_text.get()
message = Message_text.get()
payload = 'to': receiver, 'from': sender, 'message': message,
'email': '@example.com', 'api_secret': '123456789abcdefg'
r = requests.get('https://example.com/dashboard/api', params=payload)
print(r.text)
【讨论】:
以上是关于如何将我的 python 逻辑应用到 tkinter GUI?这是一个简单的 GET 请求程序的主要内容,如果未能解决你的问题,请参考以下文章
如何将我的 Flutter App 联系人链接到 android 的原生联系人应用程序?