是否有某種方式讓python中的控制檯窗口上的鼠標按下?我知道你可以這樣做,因爲如果你正在運行Windows,你可以打開cmd並輸入「edit」。你將如何在Python中做這個例子?謝謝。在python的控制檯窗口上獲取鼠標按下
0
A
回答
0
是的,但這是相當數量的工作。
http://sourceforge.net/projects/pywin32/files/
它的工作原理就像從C代碼談話的Win32API的。
如果您在Google上使用MSDN上的函數名稱,Microsoft文檔相當不錯。
pywin32包括一個稱爲win32console_demo.py
添加以下行,以使鼠標輸入文件。剛剛創建了conin之後。
conin.SetConsoleMode(ENABLE_WINDOW_INPUT | ENABLE_MOUSE_INPUT)
win32console_demo.py編輯啓用鼠標輸入。
import win32con
import win32file
from win32console import *
import traceback, time
virtual_keys={}
for k,v in win32con.__dict__.items():
if k.startswith('VK_'):
virtual_keys[v]=k
free_console=True
try:
AllocConsole()
except error, exc:
if exc.winerror!=5:
raise
## only free console if one was created successfully
free_console=False
stdout=GetStdHandle(STD_OUTPUT_HANDLE)
conin=PyConsoleScreenBufferType(win32file.CreateFile("CONIN$", win32con.GENERIC_READ|win32con.GENERIC_WRITE, win32con.FILE_SHARE_READ, None, win32con.OPEN_EXISTING, 0, 0))
conin.SetConsoleMode(ENABLE_WINDOW_INPUT | ENABLE_MOUSE_INPUT)
newbuffer=CreateConsoleScreenBuffer()
newbuffer.SetConsoleActiveScreenBuffer()
newbuffer.SetConsoleTextAttribute(FOREGROUND_RED|FOREGROUND_INTENSITY
|BACKGROUND_GREEN|BACKGROUND_INTENSITY)
newbuffer.WriteConsole('This is a new screen buffer\n')
newbuffer.SetConsoleTextAttribute(FOREGROUND_RED|FOREGROUND_INTENSITY
|BACKGROUND_GREEN|BACKGROUND_INTENSITY)
newbuffer.WriteConsole('Press some keys, click some characters with the mouse\n')
newbuffer.SetConsoleTextAttribute(FOREGROUND_BLUE|FOREGROUND_INTENSITY
|BACKGROUND_RED|BACKGROUND_INTENSITY)
newbuffer.WriteConsole('Hit "Esc" key to quit\n')
breakout=False
while not breakout:
input_records=conin.ReadConsoleInput(10)
for input_record in input_records:
if input_record.EventType==KEY_EVENT:
if input_record.KeyDown:
if input_record.Char=='\0':
newbuffer.WriteConsole(virtual_keys.get(input_record.VirtualKeyCode, 'VirtualKeyCode: %s' %input_record.VirtualKeyCode))
else:
newbuffer.WriteConsole(input_record.Char)
if input_record.VirtualKeyCode==win32con.VK_ESCAPE:
breakout=True
break
elif input_record.EventType==MOUSE_EVENT:
if input_record.EventFlags==0: ## 0 indicates a button event
if input_record.ButtonState!=0: ## exclude button releases
pos=input_record.MousePosition
# switch the foreground and background colors of the character that was clicked
attr=newbuffer.ReadConsoleOutputAttribute(Length=1, ReadCoord=pos)[0]
new_attr=attr
if attr&FOREGROUND_BLUE:
new_attr=(new_attr&~FOREGROUND_BLUE)|BACKGROUND_BLUE
if attr&FOREGROUND_RED:
new_attr=(new_attr&~FOREGROUND_RED)|BACKGROUND_RED
if attr&FOREGROUND_GREEN:
new_attr=(new_attr&~FOREGROUND_GREEN)|BACKGROUND_GREEN
if attr&BACKGROUND_BLUE:
new_attr=(new_attr&~BACKGROUND_BLUE)|FOREGROUND_BLUE
if attr&BACKGROUND_RED:
new_attr=(new_attr&~BACKGROUND_RED)|FOREGROUND_RED
if attr&BACKGROUND_GREEN:
new_attr=(new_attr&~BACKGROUND_GREEN)|FOREGROUND_GREEN
newbuffer.WriteConsoleOutputAttribute((new_attr,),pos)
else:
newbuffer.WriteConsole(str(input_record))
time.sleep(0.1)
newbuffer.Close()
if free_console:
FreeConsole()
1
我個人不從一個事實,即它只能在第一時間它是進口的最後答案喜歡PyWin32,事後也無法導入它的主要PYD模塊。
然後就是它不是跨平臺的。
詛咒是一個更好的選擇,儘管它不是python27正好友好,但我設法得到它在葡萄酒的工作:
import _curses # _curses.pyd supplied locally for python27 win32
import curses
screen = curses.initscr()
#curses.noecho()
curses.curs_set(0)
screen.keypad(1)
curses.mousemask(curses.ALL_MOUSE_EVENTS)
screen.addstr("This is a Sample Curses Script\n\n")
key=0
while key!=27: # Esc to close
key = screen.getch()
#screen.erase()
if key == curses.KEY_MOUSE:
_, mx, my, _, _ = curses.getmouse()
y, x = screen.getyx()
screen.addstr('mx, my = %i,%i \r'%(mx,my))
screen.refresh()
curses.endwin()
在這個例子中,你需要點擊,拖動和釋放要註冊的事件,但我認爲這有一個辦法。
我剛剛玩這個我自己(我並不想與PyQt的或PyGLFW所有複雜)
編輯:
設法得到它按預期工作和更新的代碼。 您不需要再拖動該活動進行註冊。
1
前面的答案都是正確的:您可以在Windows上使用pywin32或在Linux上使用curses來處理鼠標輸入。不過,它們都不適用於其他平臺。
如果你想要處理兩者或只是一個更簡單的API的東西,你可以使用我最近寫的一個包 - asciimatics。 Screen類handles mouse input通過包裝上述兩種解決方案以跨平臺的方式用於控制檯。
相關問題
- 1. 獲取鼠標下的窗口值
- 2. cout掛在控制檯窗口中的鼠標點擊
- 3. 鼠標按下並釋放窗口
- 4. 在Python中的Tkinter窗口之外獲取鼠標事件
- 5. 在python窗口中獲取本地鼠標位置
- 6. jquery - 如何獲取窗口上的鼠標座標卸載?
- 7. 獲取點擊鼠標按鈕的窗口句柄
- 8. 如何使用Python控制檯在網站上執行窗口?
- 9. 如何正確獲取鼠標下的窗口?
- 10. 如何獲取控制檯程序中的鼠標位置?
- 11. 獲取控制檯中的鼠標和鍵盤輸入C++
- 12. 在鼠標上獲取控件
- 13. 如何在鼠標上獲取控制座標單擊? C#
- 14. 用javaw控制檯窗口?
- 15. 其他控制檯窗口
- 16. .NET控制檯窗口
- 17. Unkillable控制檯窗口
- 18. 隱藏控制檯窗口
- 19. 隱藏控制檯窗口
- 20. Drag'n'drop到控制檯窗口
- 21. 檢測控制檯窗口?
- 22. 激活控制檯窗口
- 23. Visual Studio控制檯窗口
- 24. 控制檯窗口關閉
- 25. 控制PowerShell控制檯窗口位置
- 26. 使窗口控制檯光標不可見與python ctypes模塊
- 27. 通過python在攪拌機中獲取鼠標按下事件
- 28. 如何在控制檯窗口中找到光標的座標?
- 29. 通過鼠標光標在Powershell/wasp中獲取窗口標題?
- 30. 獲取窗口在光標下的窗口句柄
請參閱[this](http://stackoverflow.com/questions/6285270/how-can-i-get-the-mouse-position-in-a-console-program)SO問題和答案。你可能不得不在C中創建一個模塊,因爲我懷疑標準Python爲此提供了一個本地模塊。 – 2011-12-30 08:55:15