过去几天我一直在使用python和Curses进行终端GUI工作,觉得我没有取得任何进展。现在我需要做的是创建两个面板,它们占据屏幕的一半减去1到2个字符作为边距。我希望这些窗口能够处理调整大小,因此如果用户决定使其屏幕变大或变小,我的面板会调整大小以适应用户的需要。
+---------------------------+ +---------------------------+
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
+---------------------------+ +---------------------------+
此时我可以绘制窗口并让它们调整大小。问题是,如果我调整小尺寸然后我的框当前设置我得到一个错误。
_curses_panel.error: move_panel() returned ERR
我不确定这是否是由于我如何检查和调整窗口大小或Curses的限制。
请您查看我的代码,如果我失去理智,请告诉我?
import curses
import curses.panel
screen = curses.initscr()
curses.start_color()
curses.noecho()
curses.curs_set(1)
screen.keypad(1)
curses.cbreak()
height,width = screen.getmaxyx()
window = curses.newwin(1,1,1,1)
window2 = curses.newwin(height -2 ,(width/2)-10, 1,width/2+1)
left_panel = curses.panel.new_panel(window)
right_panel = curses.panel.new_panel(window2)
window.border('|', '|', '-', '-', '+', '+', '+', '+')
window2.border('|', '|', '-', '-', '+', '+', '+', '+')
curses.panel.update_panels()
curses.doupdate()
running = True
x = 0
while ( running ):
height,width = screen.getmaxyx()
k = window.getch()
if k == curses.KEY_RESIZE:
window2.erase()
window.erase()
h, w = screen.getmaxyx()
window2.resize(height - 2 ,(width/2)-10)
window.resize(height - 2,(width/2) - 10)
left_panel.replace(window)
right_panel.replace(window2)
left_panel.move(0,0)
right_panel.move(0,width/2)
window2.border('|', '|', '-', '-', '+', '+', '+', '+')
window.border('|', '|', '-', '-', '+', '+', '+', '+')
if k == ord('q') or x >= 10:
running = False
curses.endwin()
curses.panel.update_panels()
curses.doupdate()
这段代码是在我做了很多试验和错误之后所以可能有一些代码没有意义,但处理调整大小的所有逻辑都在这个if语句中。
if k == curses.KEY_RESIZE: