为什么我的程序不能从条目中读取输入?
Why won't my program read input from entry?
from Tkinter import *
import requests
import base64
var = "lol"
var2 = "lol"
var3 = "111111"
var4 = "31039888252154&31039888252154&0&X168&1411869345&IQSAXYOS&"+var2+"&"+var3+"&&1&3&1&ubugg@zetmail.com&goohoo&1411603529&&2&"
encoded = base64.b64encode(var4)
var5 = encoded
payload = {'X1': '218',
'X127': 'X325',
'X171':var,
'X677':'1420103258',
'X678':'208180484',
'X691':var5,
'X763':'1'}
def bluh(e):
var = e1.get()
var2 = e2.get()
var3 = e3.get()
def Send(e):
requests.post("http://us23.chatzy.com/", data=payload)
def p1(e):
print var
print var2
print var3
#Sh!t in the GUI
root = Tk()
root.title("Spam Project")
root.geometry("200x200")
app = Frame(root)
app.grid()
button1 = Button(app, text = "Send")
button1.grid()
button1.bind('<Button-1>', Send)
e1 = Entry(root)
e1.grid()
e1.insert(0,"Message")
e2 = Entry(root)
e2.grid()
e2.insert(0,"Name")
e3 = Entry(root)
e3.grid()
e3.insert(0,"Color in Hex")
button2 = Button(app, text = "Submit")
button2.grid()
button2.bind('<Button-1>', bluh)
button3 = Button(app, text = "Print")
button3.grid()
button3.bind('<Button-1>', p1)
var = e1.get()
var2 = e2.get()
var3 = e3.get()
#Event loop
root.mainloop()
基本上,这应该做的是获取名称、消息和十六进制颜色,并将它们作为 HTTP 请求发送到聊天室,这一切都在终端中工作,但后来我试图在顶部缝合一个 GUI,在最上面的 var
、var2
、var3
都是默认值,我有提交按钮来更改这些值,但它根本不起作用,所以我制作了 "print" 按钮打印三个值并且它们没有改变,谁能告诉我我的代码有什么问题以及如何让这三个条目根据其中的内容更改变量?
这是变量的作用。
- var 是要发送的消息。
- var2 是名字
- var3 是十六进制消息的颜色
- var4 是作为请求一部分的字符串,然后
编码成 Base64
- var5 是 var4 编码成 Base64
要在 Python 中使用全局变量,您需要 global
语句。因此,您需要像这样修改 bluh
函数:
def bluh(e):
global var, var2, var3
var = e1.get()
var2 = e2.get()
var3 = e3.get()
(我还修复了代码以使用 e1
、e2
、e3
,而不是仅使用 e1
)
在您的版本中,您在 bluh
函数中创建了新的局部变量 var
、var2
和 var3
,与定义的全局变量无关在你的文件的顶部。另请注意,通常不鼓励使用全局变量。
p1
函数也是如此,因为您还想访问全局变量。
在 GUI 代码中避免使用全局变量的常用方法是使用 class。我希望这对你来说不是太高级。但如果是这样,那么如果你想进行认真的编程,那么你必须在某个时候学习这些东西。 :) 因此请阅读 Python 文档中的 classes,然后如果您仍然无法弄清楚我的代码中的内容,请询问,我会尽力解释。
出于测试目的,我已经注释掉了实际的 requests
内容。
#! /usr/bin/env python
from Tkinter import *
#import requests
import base64
def build_payload(var1, var2, var3):
var4 = "31039888252154&31039888252154&0&X168&1411869345&IQSAXYOS&" \
+ var2 + "&" + var3 \
+ "&&1&3&1&ubugg@zetmail.com&goohoo&1411603529&&2&"
print 'var4 = [%s]\n' % var4
var5 = base64.b64encode(var4)
payload = {
'X1': '218',
'X127': 'X325',
'X171': var1,
'X677': '1420103258',
'X678': '208180484',
'X691': var5,
'X763': '1'
}
return payload
class my_GUI(object):
def __init__(self):
#Build GUI
root = Tk()
root.title("Spam Project")
root.geometry("200x200")
app = Frame(root)
app.grid()
button = Button(app, text = "Send")
button.grid()
button.bind('<Button-1>', self.send_data)
self.e1 = Entry(root)
self.e1.grid()
self.e1.insert(0, "Message")
self.e2 = Entry(root)
self.e2.grid()
self.e2.insert(0, "Name")
self.e3 = Entry(root)
self.e3.grid()
self.e3.insert(0, "Color in Hex")
button = Button(app, text = "Print")
button.grid()
button.bind('<Button-1>', self.print_data)
#Start tkinter event loop
root.mainloop()
def print_data(self, e):
var1 = self.e1.get()
var2 = self.e2.get()
var3 = self.e3.get()
print var1, var2, var3
def send_data(self,e):
var1 = self.e1.get()
var2 = self.e2.get()
var3 = self.e3.get()
print var1, var2, var3
payload = build_payload(var1, var2, var3)
print 'Sending payload', payload
#requests.post("http://us23.chatzy.com/", data=payload)
def main():
my_GUI()
if __name__ == '__main__':
main()
PS。我已经更改了一些函数的名称,而不是它们在您的代码中的名称,但我(大部分)保留了变量名称。以后,尝试使用更有意义的名称 - 这会让您自己和其他试图阅读您的代码的人的生活变得更轻松。
from Tkinter import *
import requests
import base64
var = "lol"
var2 = "lol"
var3 = "111111"
var4 = "31039888252154&31039888252154&0&X168&1411869345&IQSAXYOS&"+var2+"&"+var3+"&&1&3&1&ubugg@zetmail.com&goohoo&1411603529&&2&"
encoded = base64.b64encode(var4)
var5 = encoded
payload = {'X1': '218',
'X127': 'X325',
'X171':var,
'X677':'1420103258',
'X678':'208180484',
'X691':var5,
'X763':'1'}
def bluh(e):
var = e1.get()
var2 = e2.get()
var3 = e3.get()
def Send(e):
requests.post("http://us23.chatzy.com/", data=payload)
def p1(e):
print var
print var2
print var3
#Sh!t in the GUI
root = Tk()
root.title("Spam Project")
root.geometry("200x200")
app = Frame(root)
app.grid()
button1 = Button(app, text = "Send")
button1.grid()
button1.bind('<Button-1>', Send)
e1 = Entry(root)
e1.grid()
e1.insert(0,"Message")
e2 = Entry(root)
e2.grid()
e2.insert(0,"Name")
e3 = Entry(root)
e3.grid()
e3.insert(0,"Color in Hex")
button2 = Button(app, text = "Submit")
button2.grid()
button2.bind('<Button-1>', bluh)
button3 = Button(app, text = "Print")
button3.grid()
button3.bind('<Button-1>', p1)
var = e1.get()
var2 = e2.get()
var3 = e3.get()
#Event loop
root.mainloop()
基本上,这应该做的是获取名称、消息和十六进制颜色,并将它们作为 HTTP 请求发送到聊天室,这一切都在终端中工作,但后来我试图在顶部缝合一个 GUI,在最上面的 var
、var2
、var3
都是默认值,我有提交按钮来更改这些值,但它根本不起作用,所以我制作了 "print" 按钮打印三个值并且它们没有改变,谁能告诉我我的代码有什么问题以及如何让这三个条目根据其中的内容更改变量?
这是变量的作用。
- var 是要发送的消息。
- var2 是名字
- var3 是十六进制消息的颜色
- var4 是作为请求一部分的字符串,然后 编码成 Base64
- var5 是 var4 编码成 Base64
要在 Python 中使用全局变量,您需要 global
语句。因此,您需要像这样修改 bluh
函数:
def bluh(e):
global var, var2, var3
var = e1.get()
var2 = e2.get()
var3 = e3.get()
(我还修复了代码以使用 e1
、e2
、e3
,而不是仅使用 e1
)
在您的版本中,您在 bluh
函数中创建了新的局部变量 var
、var2
和 var3
,与定义的全局变量无关在你的文件的顶部。另请注意,通常不鼓励使用全局变量。
p1
函数也是如此,因为您还想访问全局变量。
在 GUI 代码中避免使用全局变量的常用方法是使用 class。我希望这对你来说不是太高级。但如果是这样,那么如果你想进行认真的编程,那么你必须在某个时候学习这些东西。 :) 因此请阅读 Python 文档中的 classes,然后如果您仍然无法弄清楚我的代码中的内容,请询问,我会尽力解释。
出于测试目的,我已经注释掉了实际的 requests
内容。
#! /usr/bin/env python
from Tkinter import *
#import requests
import base64
def build_payload(var1, var2, var3):
var4 = "31039888252154&31039888252154&0&X168&1411869345&IQSAXYOS&" \
+ var2 + "&" + var3 \
+ "&&1&3&1&ubugg@zetmail.com&goohoo&1411603529&&2&"
print 'var4 = [%s]\n' % var4
var5 = base64.b64encode(var4)
payload = {
'X1': '218',
'X127': 'X325',
'X171': var1,
'X677': '1420103258',
'X678': '208180484',
'X691': var5,
'X763': '1'
}
return payload
class my_GUI(object):
def __init__(self):
#Build GUI
root = Tk()
root.title("Spam Project")
root.geometry("200x200")
app = Frame(root)
app.grid()
button = Button(app, text = "Send")
button.grid()
button.bind('<Button-1>', self.send_data)
self.e1 = Entry(root)
self.e1.grid()
self.e1.insert(0, "Message")
self.e2 = Entry(root)
self.e2.grid()
self.e2.insert(0, "Name")
self.e3 = Entry(root)
self.e3.grid()
self.e3.insert(0, "Color in Hex")
button = Button(app, text = "Print")
button.grid()
button.bind('<Button-1>', self.print_data)
#Start tkinter event loop
root.mainloop()
def print_data(self, e):
var1 = self.e1.get()
var2 = self.e2.get()
var3 = self.e3.get()
print var1, var2, var3
def send_data(self,e):
var1 = self.e1.get()
var2 = self.e2.get()
var3 = self.e3.get()
print var1, var2, var3
payload = build_payload(var1, var2, var3)
print 'Sending payload', payload
#requests.post("http://us23.chatzy.com/", data=payload)
def main():
my_GUI()
if __name__ == '__main__':
main()
PS。我已经更改了一些函数的名称,而不是它们在您的代码中的名称,但我(大部分)保留了变量名称。以后,尝试使用更有意义的名称 - 这会让您自己和其他试图阅读您的代码的人的生活变得更轻松。