Wie kann ich eine randlose Anwendung in Python (Windows) erstellen?
-
28-10-2019 - |
Frage
Ich möchte wissen, wie eine Anwendung in Windows erstellt wird, die nicht den Standardrahmen hat.insbesondere die Titelleiste mit Schaltflächen zum Minimieren, Maximieren und Schließen. Ich denke darüber nach, ein Ticker-Programm zu schreiben, das oben oder unten auf dem Bildschirm einen engen Platz einnimmt, aber ich werde es nicht versuchen, es sei denn, es ist möglich, eine dünne Anwendung in Python zu erstellen.Jede Hilfe bei der Terminologie wird geschätzt;Vielleicht weiß ich nicht, wie ich bei der Suche die richtige Frage stellen soll.Hat Tkinter diese Option? Danke
Lösung
Ich habe hier ein Beispiel gefunden, das meine Frage beantwortet hat.overrideredirect(1)
ist die Schlüsselfunktion.
Ich mag diese Methode, weil ich mit Tk vertraut bin und eine Tk-Lösung bevorzugt habe, aber die anderen Antworten für alternative Lösungen finden.
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()
Sie müssen nur Ihre eigene Kill-Schaltfläche hinzufügen oder die Methode beenden.
Andere Tipps
Wenn Sie bereit sind, Qt / PySide zu verwenden, werfen Sie einen Blick auf QtCore.Qt.FramelessWindowHint
Der folgende Code beweist nur, dass es möglich ist und versucht nicht, schrecklich nützlich zu sein.Insbesondere müssen Sie das Beenden der App erzwingen, damit die App geschlossen wird.In einer ordnungsgemäßen Implementierung würden Sie Mausereignisse auf benutzerdefinierte Weise behandeln, damit der Benutzer die Anwendung verschieben und schließen kann.Um dies auszuführen, müssen Sie PySide installieren.
Code gehackt
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_())
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_())
Versuchen Sie es mit QT Designer und Python (PyQT4)
und dieser Code
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 ist Ihre UI-Datei Erstellt mit "cmd" in Ihrem Projektverzeichnis (von cd [Leerzeichen] [Ihr Pfad hier])
und geben Sie dies ein
pyuic4 resfile.ui -o TestUI.py
oben erstellt die Datei TestUI.py im Projektordner
resfile.ui ist die Datei, die Sie in QT Designer erstellt haben
Hoffe das hilft.