【问题标题】:Why won't my program read input from entry?为什么我的程序不会从条目中读取输入?
【发布时间】:2015-01-02 10:16:36
【问题描述】:
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,在顶部,varvar2var3 都是默认值,我有提交按钮来更改这些值,但它根本不起作用,所以我制作了“打印”按钮来打印这三个值,它们不要改变,谁能告诉我我的代码有什么问题,我怎样才能让这三个条目根据它们里面的内容来改变变量?

这是变量的作用。

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

【问题讨论】:

    标签: python user-interface tkinter


    【解决方案1】:

    在 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。我已经将一些函数的名称从它们在您的代码中更改了,但我将变量名称(大部分)保持不变。将来,请尝试使用更有意义的名称 - 它让您自己和其他尝试阅读您的代码的人的生活更轻松。

    【讨论】:

    • 哇,很难相信这是对我的代码的重写,我会研究你写的东西并从中吸取教训,我也会确保使用更有意义的名字我会努力学习那种“课堂”魔法,非常感谢:D
    • 不用担心,@user3907837。如果你喜欢我的回答,请随时accept它。 :) 类起初可能看起来很奇怪,但它们真的并不难理解。主要是,它们只是为我们提供了一种将一堆数据和函数捆绑在一个单元中的方法。
    【解决方案2】:

    要在 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 函数也是如此,因为您还想访问全局变量。

    【讨论】:

      猜你喜欢
      • 2011-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-15
      相关资源
      最近更新 更多