Это трудно объяснить, но я постараюсь изо всех сил.
У меня есть эта часть моего кода
def hideConsole():
hideConsole = win32console.GetConsoleWindow()
win32gui.ShowWindow(hideConsole, 0)
который скрывает консоль, и у меня есть эта часть, чтобы включить ее
def onKeyboardEvent(event):
if event.KeyID == 192 and event.Alt == 32:
hideConsole()
return True
как я могу создать "систему", где, когда я нажимаю комбинацию клавиш один раз, консоль скрывается, и в следующий раз консоль появится? (измените значение hideConsole, 1)
Вы можете использовать атрибут функции, который вы переключаете между истинным и ложным для каждого вызова:
def toggleConsole():
toggleConsole.show = not getattr(toggleConsole, "show", True)
console = win32console.GetConsoleWindow()
win32gui.ShowWindow(console, int(toggleConsole.show))
Вот краткий пример того, как это работает:
>>> def test():
... test.show = not getattr(test, "show", True)
... print int(test.show)
...
>>> test()
0
>>> test()
1
>>> test()
0
С булевой переменной, примерно так:
class Console(object):
def __init__(self):
self.is_hidden = False
self.handle = win32console.GetConsoleWindow()
def toggle(self):
win32gui.ShowWindow(self.handle, 1 if self.is_hidden else 0)
self.is_hidden = not self.is_hidden
con_visible = True
def setVisibility(visible):
global con_visible
hideConsole = win32console.GetConsoleWindow()
win32gui.ShowWindow(hideConsole, int(visible))
con_visible = bool(visible)
def onKeyboardEvent(event):
if event.KeyID == 192 and event.Alt == 32:
if con_visible:
setVisibility(False)
else:
setVisibility(True)
return True
Если консоль содержит внутреннее состояние видимости, вы можете использовать ее вместо глобальной переменной.
Вам нужно как-то поддерживать состояние:
hidden = False
def toggleConsoleVisibility():
global hidden
hideConsole = win32console.GetConsoleWindow()
win32gui.ShowWindow(hideConsole, 1 if hidden else 0)
hidden = not hidden
def onKeyboardEvent(event):
if event.KeyID == 192 and event.Alt == 32:
toggleConsoleVisibility()
return True
Если возможно, напишите это как часть класса. Затем вы можете сохранить hidden
переменную, инкапсулированную классом, а не плавать в глобальном пространстве имен.
if
записывается как <true> if <expr> else <false>
, а не с ?:
.
Вы можете использовать переменную состояния hideValue
с начальным значением 0 и для каждого события клавиатуры:
hideValue = 1 - hideValue
Это приведет к переключению hideValue
между 0 и 1.
Затем вы можете вызвать win32gui.ShowWindow(hideConsole, hideValue)
.
not
занимает больше строки, но проще.
hidevalue = False
, а затем hidevalue = not hidevalue
hideConsole
предлагает действие, а переменная содержит не действие, а вещь.consoleToHide
может быть лучшим именем переменной. Не то, чтобы вы действительно нуждались в этом ; совершенно нормально просто написатьwin32gui.ShowWindow(win32console.GetConsoleWindow(), 0)
.