【问题标题】:Add a graphic interface (Tkinter) to this programm in python?在python中向这个程序添加图形界面(Tkinter)?
【发布时间】:2015-04-15 13:32:59
【问题描述】:

我刚刚用 Python 编写了一个程序。该程序执行以下操作:

有一个类叫做 original。它有 2 个方法(init 的一部分)。第一种方法是代码。 “代码”所做的是接收一个字符串并将其编码,将接收到的字符串中的每个字符更改为 ASCII 表的另一个字符。这个 ASCII 字符取决于函数genracion_clave。函数genracion_clave 随机生成一个介于1 和k 之间的数字(k 是该函数的输入参数)。

例如,字符“e”在 ASCII 表的第 101 位。因此,如果生成的数字是 8,则字符 e 将更改为 ASCII 表中位置为 109 (101 + 8) 的字符

decode方法接收编码后的字符串和clave,返回解码后的字符串。

我想做的是在程序中添加一个图形界面,其中包含:

一个原始字符串的输入框,一个画布(或输出框?),我们将在其中显示编码和解码的字符串,一个用于编码的按钮和一个用于解码的按钮。

我是 Python 的新手,我已经阅读了一些关于 Tkinter 的教程,但我觉得这并不容易。所以我会很感激任何帮助:)

from random import randint 

class original():

def __init__(self, mensaje_original):
    self.mensaje_original = mensaje_original


def code(self, gen_clav, *args):
    cadena_codificada ="" 
    clave = gen_clav(*args) 
    for i in self.mensaje_original:
        clave_mod = ord(i) + clave
        if clave_mod > 255:
            clave_mod = clave_mod - 255

        cadena_codificada = cadena_codificada + chr(clave_mod)

    return cadena_codificada, clave    

def decode(self, cadena_cod_clave):
    cadena_decodificada =""
    clave = int(cadena_cod_clave[1])
    for i in cadena_cod_clave[0]:
        clave_mod = ord(i) - clave
        if clave_mod > 255:
            clave_mod = clave_mod - 255
        cadena_decodificada = cadena_decodificada + chr(clave_mod)          

    return cadena_decodificada, cadena_cod_clave[1]     

def generacion_clave(k):
cl = randint(1, k + 1)
return cl


mensaje_original = "Hola tio como estas"   
mensaje = original(mensaje_original)
cad_cod_clav = mensaje.code(generacion_clave, 10)


cad_dec_clav = mensaje.decode(cad_cod_clav)
print "La cadena original es: %s" %cad_dec_clav[0]   
print "La cadena cifrada es: %s" %cad_cod_clav[0]
print "la clave es: %d " %cad_cod_clav[1]

提前非常感谢! 巴勃罗

【问题讨论】:

  • 欢迎来到 Stack Overflow。不幸的是,这不是免费的代码编写服务,所以你真的应该尝试自己实现它。如果您在实施过程中遇到任何问题,您可以询问具体的on-topicquestion。

标签: python string python-2.7 tkinter tkinter-canvas


【解决方案1】:

使用 Tk 构建 GUI 并不难。

您需要一个条目(用于输入的小部件)、一组标签(用于打印输出)和一个按钮。

这里提到了构建主框架和使用入口小部件。 http://www.effbot.org/tkinterbook/entry.htm

我建议你尝试一个基本的 gui(可能在一个单独的文件中),我们会在 GUI 完成后链接它们。

如果您需要,我会在创建基本 GUI 后帮助您进行链接。

【讨论】:

    【解决方案2】:

    我试着去做。我开始只添加 2 个按钮(编码和退出)。 Encode 应该调用类 original 中的方法 encode 并且 Quit 应该关闭窗口(有效)。有人知道为什么“编码”按钮不起作用吗?

    from random import randint 
    from Tkinter import *
    
    
    class original():
    
    def __init__(self, mensaje_original):
        self.mensaje_original = mensaje_original
    
    
    def code(self, gen_clav, *args):
        cadena_codificada ="" 
        clave = gen_clav(*args) 
        for i in self.mensaje_original:
            clave_mod = ord(i) + clave
            if clave_mod > 255:
                clave_mod = clave_mod - 255
    
            cadena_codificada = cadena_codificada + chr(clave_mod)
        print  cadena_codificada, clave   
        return cadena_codificada, clave    
    
    def decode(self, cadena_cod_clave):
        cadena_decodificada =""
        clave = int(cadena_cod_clave[1])
        for i in cadena_cod_clave[0]:
            clave_mod = ord(i) - clave
            if clave_mod > 255:
                clave_mod = clave_mod - 255
            cadena_decodificada = cadena_decodificada + chr(clave_mod)          
    
        return cadena_decodificada, cadena_cod_clave[1]     
    
    def generacion_clave(k):
        cl = randint(1, k + 1)
        return cl
    
    
    class graficos:
    
        def __init__(self, master):
        frame = Frame(master)
        frame.pack()
        self.encode_buttom = Button(frame, text = "Encode!", command = self.printMessage)
        self.encode_buttom.pack(side = LEFT)
    
        self.quit_buttom = Button(frame, text = "Quit", command = frame.quit)
        self.quit_buttom.pack(side = LEFT)
    
    def printMessage(self):
        mensaje_original = "Hola tio como estas"   
        mensaje = self.original(mensaje_original)
        print mensaje
    
    
    
    root = Tk()
    root.geometry("250x250")
    
    b = graficos(root)
    root.mainloop()
    

    非常感谢。 问候 巴勃罗

    【讨论】:

    • 代码的某些部分应该移到正确的方向。我只是复制不正确,但我认为它已经足够清楚了。再次感谢
    • 请不要在答案部分扩展您的问题。答案部分仅用于回答您的问题。如果您有其他信息要添加,可以编辑您的原始问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-16
    • 1970-01-01
    • 2021-11-19
    • 2022-12-07
    相关资源
    最近更新 更多