微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有没有办法在 tkinter 窗口内打印函数?

如何解决有没有办法在 tkinter 窗口内打印函数?

我看过有关此的帖子,但它们都与 while (x) == True:

有关

我的函数没有这些。它们位于 2 个单独的文件中。请帮忙! Screenshot of pycharm

我知道这是很多代码,但我花了几个小时在这上面,我真的不明白为什么会发生这种情况。我希望完整地发布这个项目,我可以在窗口中打印该功能在这一点上,它甚至不需要是 tkinter GUI,如果您有任何其他您认为可行的 GUI,请告诉我。提前致谢。

代码

import random

moves = ["RU","RD","LD","LU","BL","BR","DR","DL","FL","FR","UL","UR"]
dir = ["","2"]
slen = random.randint(25,30)

def scramble_gen():
    scramble = [0] * slen
    for x in range(len(scramble)):
        scramble[x] = [0] * 2
    return scramble

def scramble_replace(ar):
    for x in range(len(ar)):
        ar[x][0] = random.choice(moves)
        ar[x][1] = random.choice(dir)
    return ar

def valid(ar):
    for x in range(1,len(ar)):
        while ar[x][0] == ar[x-1][0]:
            ar[x][0] = random.choice(moves)
    for x in range(2,len(ar)):
        while ar[x][0] == ar[x-2][0] or ar[x][0] == ar[x-1][0]:
            ar[x][0] = random.choice(moves)
    return ar


def sprint(ar):
    for x in range(len(ar)):
        print(str(ar[x][0]) + str(ar[x][1]),end= " ")

s = scramble_replace(scramble_gen())'''

文件

from tkinter import *
import random
from scrambler import *
window = Tk()
window.title("Bryson's Scrambler")
lbl = Label(window,text = sprint(valid(s)))
lbl.grid(column=0,row=0)

txt = Entry(window,width=10)

txt.grid(column=1,row=0)

def clicked():

    lbl.configure(text="Button was clicked !!")

btn = Button(window,text="Click Me",command=clicked)

btn.grid(column=2,row=0)

window.mainloop()

window.mainloop()

解决方法

你必须比这更具体一些,

我可以在窗口中打印该函数。

您想将哪个函数打印到窗口中?如果您尝试使用该函数应该“打印”的任何对象来更新现有窗口,则不要完全打印它并返回对象本身。即如果你的意思是功能 sprint(

然后您应该能够从 Tkinter 调用该函数,获取它返回的内容并将其添加到窗口中,然后 refresh 它。

,

代替使用 print() 创建单个字符串并使用 return

def sprint(ar):
    text = ""

    for x in range(len(ar)):
        #print(str(ar[x][0]) + str(ar[x][1]),end= " ")
        text += str(ar[x][0]) + str(ar[x][1]) + " "

    return text

然后它会起作用

lbl = Label(window,text=sprint(valid(s)))

编辑:

更具可读性

def sprint(ar):
    text = ""

    for a,b in ar:
        text += f'{a}{b} '

    return text

或更短

def sprint(ar):
    return ' '.join(f'{a}{b}' for a,b in ar)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。