Как я могу создать приложение без полей в Python (Windows)? - PullRequest
7 голосов
/ 21 февраля 2012

Я хотел бы знать, как создать приложение в Windows, которое не имеет границы по умолчанию; особенно строка заголовка с кнопками свертывания, разворачивания и закрытия. Я подумываю о написании тикерной программы, занимающей узкое место в верхней или нижней части экрана, но я не буду пытаться сделать это, пока не сделаю тонкое приложение на Python. Любая помощь с терминологией приветствуется; может быть, я не знаю, как задать правильный вопрос в поиске. Есть ли у Tkinter такая опция? Спасибо

Ответы [ 3 ]

10 голосов
/ 23 февраля 2012

Я нашел пример, который ответил на мой вопрос здесь . overrideredirect(1) является ключевой функцией.

Мне нравится этот метод, потому что я знаком с Tk и предпочел решение Tk, но см. Другие ответы для альтернативных решений.

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()

Просто нужно добавить собственную кнопку уничтожения или метод выхода.

8 голосов
/ 21 февраля 2012

Если вы хотите использовать Qt / PySide , взгляните на QtCore.Qt.FramelessWindowHint Код ниже просто доказывает, что это возможно, и не пытается быть ужасно полезным. В частности, вам придется принудительно убить приложение, чтобы приложение закрылось. В правильной реализации вы будете обрабатывать события мыши нестандартным способом, чтобы позволить пользователю перемещать и закрывать приложение. Для этого вам необходимо установить PySide .

взломанный код

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_())
2 голосов
/ 21 февраля 2012

Попробуйте использовать QT Designer и Python (PyQT4)

и этот код

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 - ваш файл интерфейса Создано с помощью «cmd», входящего в каталог вашего проекта (cd [пробел] [ваш путь здесь])

и набрав это

pyuic4 resfile.ui -o TestUI.py

выше создаст TestUI.py в папке проектов

resfile.ui - это файл, который вы создали в QT Designer

Надеюсь, это поможет.

...