【问题标题】:I am getting { } on the end of my output. What is causing this and how do I remove it?我在输出的末尾得到 { } 。是什么原因造成的,我该如何删除它?
【发布时间】:2021-05-09 22:31:02
【问题描述】:

我正在尝试一个简单的 gui,它在同一窗口中使用“秘密号码”/密钥标识符对消息进行加密和解密,以获得乐趣。到目前为止,它有效,我对此感到非常满意。我唯一的问题是我在 crypt() 函数中得到了我想要的输出返回,然后是 {}。使用普通的 print() 函数,我没有这个问题。但是,使用 GUI 可以。我想是 tkinter 包在做这个吗?

我的代码:

from tkinter import *
import tkinter.messagebox


def crypt():
    so = int(nu1.get())
    inp = str(nu2.get().upper())
    old_dic = {chr(i): i * (int(so)+int(so))for i in range(ord("A"), ord("A") + 26)}   
    if len(inp) >= 1:
        bit = list(inp)
        spell = list(map(old_dic.get, bit))
        spell = spell[::-1]            
        ans1 = (*spell, "")
        blank4.insert(0, ans1)
        
    else:
        print("Improper input.")
        
main = Tk()
Label(main, text = "Enter secret number:").grid(row=0)
Label(main, text = "Cryptify:").grid(row=1)
Label(main, text = "Encrypted output:").grid(row=2)

Button(main, text='Show', command=crypt).grid(row=3, column=1, sticky=W, pady=4)

nu1 = Entry(main)
nu2 = Entry(main)
blank4 = Entry(main)
                   
nu1.grid(row=0, column=1)
nu2.grid(row=1, column=1)
blank4.grid(row=2, column=1)



mainloop()

我得到的加密输出如下所示:

秘密号码:45

加密:你好

加密输出:7110 6840 6840 6210 6480 {}

输出应如下所示:

秘密号码:45

加密:你好

加密输出:7110 6840 6840 6210 6480

【问题讨论】:

  • 请将其缩减为minimal reproducible example
  • 这意味着当它需要一个字符串时,你正在将一个列表或元组传递给一个 tkinter 函数。
  • @mkrieger1 我不确定要减少哪个部分,因为它已经是非常小的代码,并且我包含了可能导致问题的所有方面。同样在底部,我包括我的输入和输出,以便可以复制它。我还应该做什么?
  • 一个好方法是从头开始添加创建相同问题所需的最少代码量。例如,一个条目和标签就足够了,而不是多个条目和标签。
  • 好的,谢谢。我对这个包了解得不够多,无法理解我的问题出在哪里。所以我包括了很大一部分。我会更新的。

标签: python tkinter


【解决方案1】:

原因很简单,tkinter使用tcl,它不知道pythonlisttuple是什么,它是tcl读取元组/列表的方式,放在@987654326里面@ 就像你注意到的那样,所以把它转换成一个字符串,比如:

ans1 = (*map(str,spell), "")
blank4.insert(0, ' '.join(ans1))

对所有出现这种情况的地方都这样做。抱歉,我刚才发布了答案,网络中断了:/

【讨论】:

  • 我试过这个,现在我得到这个错误: return self.func(*args) File "", line 15, in crypt ans1 = ''.join ((*spell, "")) TypeError: sequence item 0: expected str instance, int found
  • 我在原始代码中的打印输出是:[7110, 6840, 6840, 6210, 6480] 输入为 so = 45 和 inp = hello。
  • @FannyPackFanatic 我已经更新了答案。
  • 您更新的代码有效!非常感谢。这让我发疯了!
  • ans1 = (*map(str,spell), "") # 空字符串是为了删除可能已经放入的任何标点符号。
猜你喜欢
  • 2016-04-27
  • 1970-01-01
  • 2022-07-09
  • 1970-01-01
  • 2012-08-20
  • 1970-01-01
  • 2011-07-05
  • 2015-05-25
  • 1970-01-01
相关资源
最近更新 更多