#python #python-3.x #multithreading #tkinter #multiprocessing
Вопрос:
Привет, я пытаюсь использовать консоль во время работы прозрачного окна. Таким образом, должна быть консоль и окно tkinter. И то, и другое должно быть пригодно для использования. Я попробовал использовать многопоточность и многопроцессорность, но и то, и другое не сработало. Я также попытался сделать окно tkinter в дополнительном файле и запустить его с помощью os.system(winow.py) но для людей, у которых не установлен python, это не сработает.
from threading import Thread
import tkinter
import os
import keyboard
import time
FONT = "{Verdana} 10 bold"
btest = True
txt = """
Text here
"""
root = tkinter.Tk()
def overlay():
text = tkinter.Text(root,relief=tkinter.FLAT,
font=FONT,state='normal', height=5, bg='grey70', fg='blue')
text.insert(tkinter.END, txt)
text.config(state=tkinter.DISABLED) #make it readonly with calling state=diabled ,state=normal is write
text.pack(expand=tkinter.YES, fill=tkinter.BOTH)
button = tkinter.Button(root, text='Exit', bd=1, command=quit)
button.pack(side=tkinter.BOTTOM, fill=tkinter.X)
text.insert(tkinter.END, txt)
root.geometry('200x250 1710-820')
root.overrideredirect(1) # fenster ohne aussen rum :-)
root.attributes('-alpha', 0.75) # fenster transparent
root.attributes('-topmost', 1) # fenster immer im vordergrund
root.mainloop()
def printgui():
os.system("cls")
print(f"Test: {btest} [alt]")
Thread(target=printgui()).start()
Thread(target=overlay()).start()
while True:
if(keyboard.is_pressed("alt")): #if u press "alt" it will change true to False
btest = not btest
time.sleep(0.2)
printgui()
if(keyboard.is_pressed("delete")):
print("n")
print("Exiting")
time.sleep(3)
os._exit(1)
Комментарии:
1. Измените
printgui()
наprintgui
, то же самоеoverlay
, что и в вашем сценарии запуска потока2. уже пробовал и не сработало, я получаю только наложение или графический интерфейс консоли
3. После того, как вы это измените, появятся ли у вас какие-либо ошибки?
4. нет, нет ошибки, он показывает мне только консоль или tkinter, но не оба одновременно
5. На этой линии:
root.geometry('200x250 1710-820')
, почему у вас есть1710-820
? Оба числа должны быть пять и меньше вашего размера экрана.