有没有办法在 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)