我想在办公室分发我的程序,以便其他人可以在我不在时使用它
我的代码:
from tkinter import *
import os
top = Tk()
top.wm_title("testest")
top.minsize(width=300, height=150)
top.maxsize(width=300, height=150)
def runscript():
os.system('python test.py')
B = Tk.Button(top, text = 'Run test', command = runscript)
B.config(width=15, height=1)
B.pack()
top.mainloop()
有什么方法可以让.py文件中的打印功能在GUI文本框而不是命令行中打印出来?
答案 0 :(得分:0)
这是一个粗略的演示,展示了如何将文本字符串打印到Label。请注意,长字符串不会被包装。如果您需要,则必须通过插入\n
换行符来自行换行,或使用wraplength
选项中提到的test
选项。或者,您可以使用Label widget代替标签来显示文字。
我的import tkinter as tk
from time import sleep
# A dummy `test` function
def test():
# Delay in seconds
delay = 2.0
sleep(delay)
print_to_gui('Files currently transferring')
sleep(delay)
print_to_gui('Currently merging all pdfs')
sleep(delay)
print_to_gui('PDFs have been merged')
sleep(delay)
print_to_gui('Finished!\nYou can click the "Run test"\n'
'button to run the test again.')
# Display a string in `out_label`
def print_to_gui(text_string):
out_label.config(text=text_string)
# Force the GUI to update
top.update()
# Build the GUI
top = tk.Tk()
top.wm_title("testest")
top.minsize(width=300, height=150)
top.maxsize(width=300, height=150)
b = tk.Button(top, text='Run test', command=test)
b.config(width=15, height=1)
b.pack()
# A Label to display output from the `test` function
out_label = tk.Label(text='Click button to start')
out_label.pack()
top.mainloop()
函数模拟“test.py”脚本中代码的操作。
time.sleep
请注意,我们通常在GUI程序中执行不调用from tkinter import *
,因为它会导致整个程序在睡眠发生时冻结。我在这里用它来模拟真实代码执行处理时会发生的阻塞延迟。
在不阻止正常GUI处理的Tkinter程序中执行延迟的常用方法是使用Text widget。
您会注意到我已将import tkinter as tk
替换为tk.Label
。这意味着我们需要键入例如Label
而不是import tkinter as tk
,但这使代码更容易阅读,因为我们现在知道所有不同名称的来源。这也意味着我们不会使用tkinter定义的所有名称来充斥我们的命名空间。 from tkinter import *
只为命名空间添加1个名称,clear_label
在当前版本中添加136个名称。有关此重要主题的详细信息,请参阅.after
method。
这是一个稍微更漂亮的示例,它将新文本附加到当前的Label文本中,并带有自动换行功能。它还有一个函数import tkinter as tk
from time import sleep
# A Dummy `test` function
def test():
# Delay in seconds
delay = 1.0
clear_label()
print_to_label('Files currently transferring')
sleep(delay)
print_to_label('Currently merging all pdfs')
sleep(delay)
print_to_label('PDFs have been merged')
sleep(delay)
print_to_label('\nFinished!\nYou can click the "Run test" '
'button to run the test again. '
'This is a very long string to show off word wrapping.'
)
# Append `text_string` to `label_text`, which is displayed in `out_label`
def print_to_label(text_string):
label_text.set(label_text.get() + '\n' + text_string)
# Force the GUI to update
top.update()
def clear_label():
label_text.set('')
top.update()
# Build the GUI
top = tk.Tk()
top.wm_title("testest")
top.minsize(width=300, height=150)
top.maxsize(width=300, height=350)
b = tk.Button(top, text='Run test', command=test)
b.config(width=15, height=1)
b.pack()
# A Label to display output from the `test` function
label_text = tk.StringVar()
out_label = tk.Label(textvariable=label_text, wraplength=250)
label_text.set('Click button to start')
out_label.pack()
top.mainloop()
来删除Label中的所有文本。它不是直接在Label中存储文本,而是使用Why is “import *” bad?。这样可以更轻松地访问旧文本,以便我们可以附加到它。
<VideoContainer id="videoDisplay" x="-2" y="0" width="640" height="480" click="hideCanvas()"/>