繁体   English   中英

为什么我的程序无法从条目读取输入?

[英]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请求发送到聊天,这些都可以在终端中使用,但是后来我尝试在最上面的var上拼接一个GUI , var2var3都是默认值,并且我有“提交”按钮来更改这些值,但是它根本行不通,所以我制作了“打印”按钮来打印这三个值,并且它们没有改变,谁能告诉我这是什么我的代码有问题,如何使这三个条目根据其中的内容更改变量?

这是变量的作用。

  • var是要发送的消息。
  • var2是名称
  • var3是十六进制消息的颜色
  • var4是请求的一部分,然后被编码为Base64
  • var5被var4编码为Base64

GUI代码中避免使用全局变量的通常方法是使用类。 我希望这对您来说不太高级。 但是如果是这样,那么,如果您想进行认真的编程,就必须在某个时候学习这些知识。 :)因此,请阅读Python文档中的类,然后,如果您仍然无法弄清我的代码在做什么,请询问&我将尝试解释。

我已经出于测试目的而注释掉了实际的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。 我已经从代码中更改了一些函数的名称,但我保留了变量名(大部分是)。 将来,请尝试使用更有意义的名称-这样会使您自己以及其他尝试读取您的代码的人的生活更加轻松。

要在Python中使用全局变量,您需要使用global语句。 因此,您需要像这样修改bluh函数:

def bluh(e):
   global var, var2, var3
   var = e1.get()
   var2 = e2.get()
   var3 = e3.get()

(我也固定在代码中使用e1e2e3 RESP。代替e1只)

在您的版本中,您正在bluh函数内创建新的局部变量varvar2var3 ,与文件顶部定义的全局变量无关。 另请注意,一般不建议使用全局变量。

p1函数也是如此,因为您还想访问全局变量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM