我们说我有这个小Python程序:
def drawLine():
userInput = input("Coordinates:")
userInput = userInput.split() # x y
# Draw
# ... some drawing algo which will print an "X" on the screen with x,y
drawLine()
drawLine()
现在注意drawLine()
被调用两次,因此可以获取两个输入并绘制两个X-es
。不幸的是,控制台会向上滚动。我想要我的python程序" 倾听"用户按键和" 不滚动"。想想一个迷你控制台Photoshop,它也不会将你的画布滚动到视线之外。
更新: 问题足够小,不能使用图书馆。
答案 0 :(得分:1)
在这种情况下,您可能需要Curses
库。
它允许您在给定坐标处显示字符串:https://docs.python.org/3.3/library/curses.html#curses.window.addstr
您也可以离开回音模式,这样您就可以根据需要处理键盘输入,而无需将其打印到控制台:https://docs.python.org/3.3/library/curses.html#curses.noecho。
答案 1 :(得分:1)
我不确定我是否完全理解您的问题,但我认为可以通过清除控制台并重新绘制框架来实现。 How to clear the interpreter console?
答案 2 :(得分:1)
使用VT100控制代码:
.element {
position: absolute;
top: 50%;
left: 50%;
transform: translateX(-50%) translateY(-50%);
}
Windows必须有类似的东西。
答案 3 :(得分:1)
如果将输入保持在控制台下方是可以的,可以使用类将画布保存在数组中,只需在需要时进行渲染。
以下是一个例子:
#X-Drawer
class Canvas:
def __init__(self, w, h):
self.w = w
self.h = h
self.c = []
for i in range(w * h):
self.c.append(' ')
print len(self.c)
def render(self):
u = 0
s = ""
for i in range(len(self.c)):
s += self.c[i]
if not i % self.w:
s += "\n"
print s
def drawX(self, x, y):
n = [(x, y), (x + 1, y + 1), (x + 2, y + 2), (x + 2, y), (x, y + 2)]
for i in n:
v = i[0] * self.w + i[1]
if v < len(self.c):
self.c[v] = 'X'
def drawLine(self, x, d):
n = []
if d:
n = [(x, y), (x + 1, y + 1), (x + 2, y + 2)]
else:
n = [(x, y), (x + 1, y + 1), (x + 2, y + 2)]
for i in n:
v = i[0] * self.w + i[1]
if v < len(self.c):
self.c[v] = 'X'
def clearScreen():
for i in range(64):
print
c = Canvas(25, 25)
while True:
clearScreen()
c.render()
i = raw_input("Coordinates: ").split()
c.drawX(int(i[0]), int(i[1]))
您也可以使用对clr
(How to clear the interpreter console?)的操作系统调用替换clearScreen,而不是打印64行。
注意:我的示例使用drawX函数,您可以使用drawLine函数和不同的坐标绘制线条。