Come posso creare un'applicazione senza bordi in Python (Windows)?
-
28-10-2019 - |
Domanda
Vorrei sapere come creare un'applicazione in Windows che non ha il bordo predefinito;in particolare la barra del titolo con i pulsanti di riduzione, ingrandimento e chiusura. Sto pensando di scrivere un programma ticker che occupi uno spazio stretto nella parte superiore o inferiore dello schermo, ma non lo proverò a meno che non sia possibile creare un'applicazione sottile in Python.Qualsiasi aiuto con la terminologia è apprezzato;forse non so come fare la domanda giusta nella ricerca.Tkinter ha questa opzione? Grazie
Soluzione
Ho trovato un esempio che ha risposto alla mia domanda qui .overrideredirect(1)
è la funzione chiave.
Mi piace questo metodo perché ho familiarità con Tk e preferisco una soluzione Tk, ma vedi le altre risposte per soluzioni alternative.
import tkMessageBox
from Tkinter import *
class App():
def __init__(self):
self.root = Tk()
self.root.overrideredirect(1)
self.frame = Frame(self.root, width=320, height=200,
borderwidth=2, relief=RAISED)
self.frame.pack_propagate(False)
self.frame.pack()
self.bQuit = Button(self.frame, text="Quit",
command=self.root.quit)
self.bQuit.pack(pady=20)
self.bHello = Button(self.frame, text="Hello",
command=self.hello)
self.bHello.pack(pady=20)
def hello(self):
tkMessageBox.showinfo("Popup", "Hello!")
app = App()
app.root.mainloop()
Devi solo aggiungere il tuo pulsante di uccisione o uscire dal metodo.
Altri suggerimenti
Se sei disposto a utilizzare Qt / PySide , dai un'occhiata a QtCore.Qt.FramelessWindowHint
Il codice qui sotto dimostra che è possibile e non cerca di essere molto utile.In particolare, dovrai forzare l'uccisione dell'app per chiuderla.In una corretta implementazione, gestiresti gli eventi del mouse in modo personalizzato per consentire all'utente di spostare e chiudere l'applicazione.Per eseguirlo, dovrai installare PySide .
Codice compromesso
import sys
from PySide import QtGui, QtCore
app = QtGui.QApplication(sys.argv)
MainWindow = QtGui.QMainWindow(parent=None, flags=QtCore.Qt.FramelessWindowHint)
MainFrame = QtGui.QFrame(MainWindow)
MainWindow.setCentralWidget(MainFrame)
MainFrameLayout = QtGui.QVBoxLayout(MainFrame)
label = QtGui.QLabel('A Label')
MainFrameLayout.addWidget(label)
MainWindow.show()
sys.exit(app.exec_())
Prova a utilizzare QT Designer e Python (PyQT4)
e questo codice
from TestUI import Ui_MainWindow
class testQT4(QtGui.QMainWindow):
def __init__(self, parent=None):
super(testQT4, self).__init__(parent,Qt.CustomizeWindowHint)
self.ui = Ui_MainWindow()
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
myapp = testQT4()
myapp.show()
sys.exit(app.exec_())
TestUI è il file dell'interfaccia utente Creato utilizzando "cmd" nella directory del progetto (da cd [spazio] [il tuo percorso qui])
e digitando questo
pyuic4 resfile.ui -o TestUI.py
sopra creerà il TestUI.py nella cartella dei progetti
resfile.ui è il file che hai creato su QT Designer
Spero che questo aiuti.