【问题标题】:Print to Tkinter GUI, not console打印到 Tkinter GUI,而不是控制台
【发布时间】:2017-11-18 04:57:06
【问题描述】:

我编写了一些脚本,其中包含一些函数来进行网络抓取。运行脚本时,使用简单的“打印”命令将结果打印到 IDLE shell。

我有一个基本的 tkinter GUI,它会在单击按钮时运行脚本,但结果仍会打印到 shell。我如何调整我的代码,以便在调用 Master.master() 时,嵌入在该进程中的所有打印语句都打印到我的 GUI 上的某个区域。我的代码如下:

from tkinter import *
import Master #Importing my scraper function

win = Tk()
win.title('Hashtag Scraper')

SearchButton = Button(win,text = 'Search')

SearchButton.grid(row=2,column = 1)

htag_label = Label(win,text = 'What Hashtag?')
htag_label.grid(row = 1,column = 0)

email_label = Label(win,text = 'FB Email')
email_label.grid(row = 1,column = 1)

password_label = Label(win,text = 'FB Password')
password_label.grid(row = 1,column = 2)

def button():
    htag = hashtag.get()
    user = usr.get()
    password = pwd.get()
    Master.master(htag,refresh = 3,usr = user,pwd = password) #Function call - want this to print on GUI instead of shell

#win.bind('<Return>', SearchButton)

SearchButton.configure(command = button)


hashtag = StringVar()
#hashtag.set('Hashtag')
hashtag_entry = Entry(win,textvariable=hashtag)
hashtag_entry.grid(row = 0, column = 0)

usr = StringVar()
usr.set('test@aol.com')
usr_entry = Entry(win,textvariable=usr)
usr_entry.grid(row = 0, column = 1)

pwd = StringVar()
#pwd.set('FB Password')
pwd_entry = Entry(win,textvariable=pwd)
pwd_entry.grid(row = 0, column = 2)

【问题讨论】:

  • 您可以将输出插入到 tkinter 文本框中。
  • 我为我对 python 的无知表示歉意,但这是否会像将我的主函数中的最终“打印”语句更改为返回和设置一样简单,而不是设置一个变量作为结果?
  • 这很简单,在这里阅读:effbot.org/tkinterbook/text.htm

标签: python user-interface tkinter


【解决方案1】:

根据您的 GUI 上的哪个位置以及您想要显示 master 方法调用的结果的小部件类型,或者可能在 cmets 中提到的新弹出 TextBox 窗口中,将其更改为您想要的小部件类型希望使用:

class Master:
    def __init__(self, htag, refresh, usr, pwd):
        self.htag = htag
        self.refresh = refresh
        self.usr = usr
        self.pwd = pwd

    def master(self):
        return '\n'.join([self.htag, str(self.refresh), self.usr, self.pwd]) 

...

def button():
    htag = hashtag.get()
    user = usr.get()
    password = pwd.get()
    m = Master(htag, refresh = 3, usr = user, pwd = password)
    master_response = m.master() #Function call - want this to print on GUI instead of shell

    top = Toplevel()
    top.title("Response from master method")
    # response_message = "Search Button pushed response"
    msg = Message(top, text=master_response)
    msg.pack()

    button = Button(top, text="Dismiss", command=top.destroy)
    button.pack()

输出:

【讨论】:

  • 谢谢!这与我正在寻找的东西很接近。在单击“搜索”按钮之前,我不希望显示任何内容。此外,我的“主”函数实际上并没有返回任何东西,它只是在显示结果时有几个打印语句。这有意义吗?
  • 当然可以 :) 我只是想提供一个想法,如果将其放入 button() 方法中,它将仅在按下按钮后显示文本,文本将是返回变量中的master() 方法文本。所以Master.master() 中的所有print 语句都可以放在该方法末尾的一个return 语句中(可能类似于return ' '.join(text1, text2)),它会返回到master_response 变量(在这里注释掉,但是你会使用它)并将小部件参数作为text = master_response
  • 我会更新答案以证明这是否没有意义。
  • 那么我需要进入我的实际脚本并将一些“打印”语句更改为“返回”吗?我仍然有点困惑,你看不到我说的脚本可能无济于事,哈哈
  • @JoeyB,对不起,我的解释很糟糕,我已经更新了代码以说明我的意思,
猜你喜欢
  • 2019-08-31
  • 2021-05-10
  • 2011-05-11
  • 2020-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-22
  • 1970-01-01
相关资源
最近更新 更多