我想为python游戏创建基于文本的GUI。我打算在多行文本之间移动字符。经过数小时的在线搜索,我发现的解决方案对此无效。我想要一些可以擦除屏幕上所有文本的东西,因此我可以重新打印同一行,但将字符移动一个空格。明确地说,我要擦除的屏幕是在IDLE中单击“运行模块”时出现的屏幕。另外,由于某些原因,我无法导入任何外部库,这在我的计算机上已损坏。
我已经尝试过ctrl + l。它绝对什么也没做。 我尝试使用os.system('cls')(我在Windows上),它会打开命令提示符,清除它,然后关闭它。不是我所需要的。 打印(“ \ n” * 50)有效,但无法清除屏幕。屏幕必须清晰,我不想打印一百万行。
这是我的代码:
import sys
valone = 5
valtwo = 5
# create line of text
sys.stdout.write(" a " * valone + " t " + " a " * valtwo)
# move t character 1 space
valone = valone -1
valtwo = valtwo + 1
# clear screen and redraw line with t moved 1 space.
答案 0 :(得分:2)
使用IDLE的Python shell无法实现。
Shell不会丢弃输出。
和
制表符会导致下一个制表符停止后开始以下文本。 (它们每8个“字符”出现一次)。换行符会导致以下文本出现在新行上。根据操作系统和字体,其他控制字符将被忽略或显示为空格,框或其他内容。
这是一个非常基本的shell,它以线性方式输出所有文本。您需要在其他Shell中运行Python以完成所需的操作。
答案 1 :(得分:1)
基于文本的图形用户界面(GUI)应表示“基于GUI框架的文本小部件”,例如IDLE使用的Python跨平台tkinter模块。当前,IDLE Shell并非旨在简化您的操作。相反,您可以使用Label或Text小部件编写自己的tkinter程序。以下内容可以帮助您开始。
import tkinter as tk
r = tk.Tk()
f = 'TkFixedFont'
s = 'X '
sv = tk.StringVar(r)
l = tk.Label(r, font=f, textvariable=sv)
sv.set(s)
t = tk.Text(r, font=f, height=1, width=10)
t.insert('1.0', 'X')
n = 0 # index of marker
i = 200 # milliseconds between moves
def moveright():
global n, s
if n < 9:
s = ' ' + s[:-1]
sv.set(s)
t.insert('1.0', ' ')
n += 1
r.after(i, moveright)
else:
moveleft()
def moveleft():
global n, s
if n:
s = s[1:] + ' '
sv.set(s)
t.delete('1.0', '1.1')
n -= 1
r.after(i, moveleft)
else:
moveright()
l.pack()
t.pack()
r.after(i, moveright)
r.mainloop()
答案 2 :(得分:0)
您也许可以使用curses
来做到这一点。它内置在Linux上的Python等上。 ,但对于Windows,则需要安装windows-curses
library。
完成此操作后,可以使用.clear()
方法:
from curses import initscr
stdscr = initscr()
stdscr.clear()
stdscr.refresh()
当然,这取决于解决安装外部模块的问题。如果不这样做,或者使用Windows之外的其他工具,恐怕您会陷入困境。
此外,我不确定在IDLE下运行时是否可以正常运行,如果不能运行,则只需从cmd提示符下运行程序即可。
编辑:我最初提到UniCurses
库,但是它似乎并没有得到很好的支持,因此我将其更改为windows-curses
,这似乎是一个在Windows上运行的内置curses
补丁。