Я надеюсь, что это то, что вы имеете в виду:
from tkinter import *
import tkinter
root = Tk()
btn1 = Button(root,text="Example")
btn1.visible = True
btn1.place(x=20, y=50)
btn1.pi = btn1.place_info()
btn3 = Button(root, text="click me", command=lambda:plugin())
btn3.place(x=20, y=150)
def plugin():
master = Tk()
def toggle1():
if btn1.visible:
btnToggle1["text"] = "Show Example"
btnToggle1["state"] = DISABLED
print ("Now you don't")
btn1.place_forget()
else:
btn1.place(btn1.pi)
print ("Now you see it")
btnToggle1["state"] = NORMAL
btnToggle1["text"] = "Hide Example"
btn1.visible = not btn1.visible
btnToggle1 = Button(master, text="Hide Example", command=toggle1)
btnToggle1.place(x=70, y=150)
master.mainloop()
root.mainloop()
Скомпилируйте его как приложение Windows Forms. Тогда он не будет отображать какой-либо пользовательский интерфейс, если вы явно не открываете какую-либо Windows.
Создайте консольное приложение «MyAppProxy» со следующим кодом и поместите MyAppProxy в каталог запуска,
public static void main(string[] args)
{
Process p = new Process("MyApp");
ProcessStartUpInfo pinfo = new ProcessStartUpInfo();
p.StartupInfo = pinfo;
pinfo.CreateNoWindow = true;
pinfo.ShellExecute = false;
p.RaiseEvents = true;
AutoResetEvent wait = new AutoResetEvent(false);
p.ProcessExit += (s,e)=>{ wait.Set(); };
p.Start();
wait.WaitOne();
}
Возможно, вам придется исправить некоторые элементы здесь, так как я не проверял правильность кода, это может не компилировать, потому что некоторые имена свойств могут отличаться, но надеюсь, что вы поняли идею.
Чтобы скрыть консольное приложение в C #, когда ничего не работает, используйте этот код:
[DllImport("kernel32.dll")]
public static extern bool FreeConsole();
Поместите FreeConsole () в любом месте кода, я поместил его в Init (), и командная строка скрыта .
Похоже, вам нужно не консольное приложение, а приложение Windows GUI, которое не открывает (видимое) окно.
Лучший способ - запустить процесс без окна.
Process p = new Process();
p.StartInfo.FileName = "cmd.exe";
p.StartInfo.Arguments = "echo Hello!";
//either..
p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
//or..
p.StartInfo.CreateNoWindow = true;
p.Start();
Смотрите другие возможные решения -
Переключить Process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden во время выполнения
и,
Вывести окно другого процесса на передний план, когда у него ShowInTaskbar = false
Вы можете Pinvoke вызов FindWindow(), чтобы получить хэндл к вашему окну, а затем вызвать ShowWindow(), чтобы скрыть окно ИЛИ Запустите ваше приложение из другого приложения, используя ProcessStartInfo.CreateNoWindow
Создайте службу wcf и разместите ее в соответствии с вашими потребностями.