如果我的代码破坏了所有内容,我试图创建一个安全失败按钮(“ q”)。 因此,当我在键盘上按“ q”时,所有显示都会启用,以防万一一切变暗。我可以使用它,但是速度很慢,所以我尝试进行多处理,但是当我按q时,代码又启动了gui 4次,但是它可以正常工作,所以所有屏幕再次打开。
那我该如何阻止它制作更多的GUI窗口?
import tkinter as tk
# import keyboard
import time
from multiprocessing import Process
def setupWork():
os.system("C:\multimonitortool-x64\MultiMonitorTool.exe /disable 4")
os.system("C:\multimonitortool-x64\MultiMonitorTool.exe /enable 3 ")
os.system("C:\multimonitortool-x64\MultiMonitorTool.exe /enable 2 ")
os.system("C:\multimonitortool-x64\MultiMonitorTool.exe /enable 1 ")
def setupMovie():
os.system("C:\multimonitortool-x64\MultiMonitorTool.exe /enable 4")
os.system("C:\multimonitortool-x64\MultiMonitorTool.exe /enable 3")
os.system("C:\multimonitortool-x64\MultiMonitorTool.exe /disable 2")
os.system("C:\multimonitortool-x64\MultiMonitorTool.exe /disable 1")
def onlyMain():
os.system("C:\multimonitortool-x64\MultiMonitorTool.exe /enable 3")
os.system("C:\multimonitortool-x64\MultiMonitorTool.exe /disable 4")
os.system("C:\multimonitortool-x64\MultiMonitorTool.exe /disable 2")
os.system("C:\multimonitortool-x64\MultiMonitorTool.exe /disable 1")
# def enableAll():
# os.system("C:\multimonitortool-x64\MultiMonitorTool.exe /enable 4")
# print("1")
# time.sleep(1)
# os.system("C:\multimonitortool-x64\MultiMonitorTool.exe /enable 3")
# print("2")
# time.sleep(1)
# os.system("C:\multimonitortool-x64\MultiMonitorTool.exe /enable 2")
# print("3")
# time.sleep(1)
# os.system("C:\multimonitortool-x64\MultiMonitorTool.exe /enable 1")
# print("4")
# time.sleep(1)
# def testkey(event):
# enableAll()
def D1():
os.system("C:\multimonitortool-x64\MultiMonitorTool.exe /enable 4")
print("1")
def D2():
os.system("C:\multimonitortool-x64\MultiMonitorTool.exe /enable 3")
print("2")
def D3():
os.system("C:\multimonitortool-x64\MultiMonitorTool.exe /enable 2")
print("3")
def D4():
os.system("C:\multimonitortool-x64\MultiMonitorTool.exe /enable 1")
print("4")
root = tk.Tk()
# fail safe if rip
# root.bind("q", testkey)
root.bind("q", D1)
root.bind("q", D2)
root.bind("q", D3)
root.bind("q", D4)
background_image = tk.PhotoImage(file= "C:/Users/ERD/Documents/codes/MultiMonitorScrips/background.png")
background_label = tk.Label(root, image=background_image)
background_label.place(relwidth=1, relheight=1)
# background_logo = tk.PhotoImage(file=)q
root.title('MMTS')
root.minsize(width=250, height=100)
button_A = tk.Button(root, text='Work', command=setupWork, bg='gray80')
button_A.place(relx=0.1, rely=0.3 ,relheight=0.35, relwidth=0.35)
button_B = tk.Button(root, text='Movie', command=setupMovie, bg='gray80')
button_B.place(relx=0.55, rely=0.3 ,relheight=0.35, relwidth=0.35)
Button_C = tk.Button(root, text='Main', command=onlyMain, bg='gray80')
Button_C.place(relx=0.35, rely=0.88, relheight=0.1, relwidth=0.3)
root.mainloop()
if __name__ == '__main__':
d1 = Process(target=D1)
d2 = Process(target=D2)
d3 = Process(target=D3)
d4 = Process(target=D4)
d1.start()
d2.start()
d3.start()
d4.start()
d1.join()
d2.join()
d3.join()
d4.join()```
答案 0 :(得分:1)
基于函数中的路径,您正在Windows上运行。
您看到的是multiprocessing
在ms-windows上工作的方式的副作用。在ms-windows上,多处理必须在所有辅助进程中import
进行文件处理。该导入应该运行时没有副作用,例如创建窗口。
因此,您应将函数定义中的所有 除外移至if __name__ is "__main__"
块中。特别是创建窗口并运行mainloop。
编辑:
此外,我不确定您为什么在这里甚至使用multiprocessing
?我假设MultiMonitorTool.exe
快速完成。
在mainloop
之后,只需致电
for n in range(4, 0, -1):
os.system(
"C:\multimonitortool-x64\MultiMonitorTool.exe /enable " + str(n)
)
那应该重新打开所有显示器。