2010-10-28 34 views
9

Tôi là người mới bắt đầu trong PyQt. Tôi đã cố tạo một ứng dụng đơn giản để thử một số tính năng của nhiều bộ công cụ. Câu hỏi của tôi là, làm cách nào để ẩn biểu tượng ứng dụng khỏi thanh tác vụ? Tôi không muốn người dùng có thể thấy biểu tượng trên thanh tác vụ và để thu nhỏ biểu tượng bằng biểu tượng này. Có bất kỳ cờ cửa sổ nào mà tôi có thể sử dụng để đạt được điều này không?Ẩn ứng dụng PyQt khỏi thanh tác vụ

+0

thể trùng lặp của [PyQt4 Minimize to Tray] (http://stackoverflow.com/questions/758256/pyqt4-minimize-to-tray) – katrielalex

+1

@katrielalex: Tôi nghĩ anh ấy có nghĩa là biểu tượng trên thanh tác vụ chứ không phải biểu tượng khay. – user225312

+1

@PulpFiction: yes; cách bạn "thu nhỏ vào khay" là ẩn biểu tượng thanh tác vụ và tạo biểu tượng khay. – katrielalex

Trả lời

0

Phỏng theo this thread:

import sys 
from PyQt4.QtGui import * 

if __name__ == '__main__': 
    app = QApplication(sys.argv) 

    widget = QWidget() 

    mainWindow = QMainWindow(widget) 
    mainWindow.show() 

    sys.exit(app.exec_()) 
0

Tôi sẽ không khuyên bạn nên ẩn hiện diện thanh tác vụ của ứng dụng, đặc biệt nếu ứng dụng hiển thị. Nếu bạn chỉ cố gắng để ngăn chặn giảm thiểu từ thanh công cụ sau đó bạn có thể đạt được điều này bằng cách tạo phụ tùng cấp cao nhất của bạn với những lá cờ cửa sổ sau như thế này:

QWidget *mainWindow = new QWidget(0, Qt::CustomizeWindowHint 
    | Qt::WindowTitleHint | Qt::WindowSystemMenuHint 
    | Qt::WindowCloseButtonHint | Qt::WindowMaximizeButtonHint); 

Nếu bạn không muốn có một lá cờ tối đa hóa, bạn có thể để lại đó là một trong danh sách.

Các cờ cửa sổ khác nhau mà Qt có thể sử dụng được ghi thành tài liệu here (Qt::WindowFlags).

5

này nên làm như lừa:

myApp.setWindowFlags(QtCore.Qt.Tool) 
1

này chở tôi hạt trong nhiều ngày. Hoàn thành mã ứng dụng để triển khai bên dưới.

bit chính:

  • override closeEvent(), cho phép nó để làm một trong hai chỉ ẩn cửa sổ hoặc thoát đúng
  • tạo ra một số cơ sở cho người dùng chọn một trong hai ẩn hoặc hành vi lối
  • không hiển thị() cửa sổ chính trên instantiation, chỉ exec_() App
import sys 
from PyQt4.QtGui import QAction, QApplication, QFrame, QIcon, \ 
    QMainWindow, QMenu, QSystemTrayIcon 
from PyQt4.QtCore import SIGNAL 

class MyApp(QMainWindow): 
    def __init__(self, parent, title): 
     super(QMainWindow, self).__init__(parent) 
     self.exitOnClose = False 
     exit = QAction(QIcon(), "Exit", self) 
     self.connect(exit, SIGNAL("triggered()"), self.exitEvent) 
     self.trayIcon = QSystemTrayIcon(QIcon(), self) 
     menu = QMenu(self) 
     menu.addAction(exit) 
     self.trayIcon.setContextMenu(menu) 
     self.connect(self.trayIcon, \ 
      SIGNAL("activated(QSystemTrayIcon::ActivationReason)"), \ 
      self.trayIconActivated) 
     self.trayIcon.show() 
     self.trayIcon.showMessage("MyApp is running!", "Click to open window\nRight click for menu") 

    def trayIconActivated(self, reason): 
     if reason == QSystemTrayIcon.Context: 
      self.trayIcon.contextMenu().show() 
     elif reason == QSystemTrayIcon.Trigger: 
      self.show() 
      self.raise_() 

    def closeEvent(self, event): 
     if self.exitOnClose: 
      self.trayIcon.hide() 
      del self.trayIcon 
      event.accept() 
     else: 
      self.hide() 
      event.setAccepted(True) 
      event.ignore() 

    def exitEvent(self): 
     self.exitOnClose = True 
     self.close() 

if __name__ == "__main__": 
    app = QApplication(sys.argv) 
    myapp = MyApp(None, "My System Tray App") 
    app.exec_() 
0

Nếu bạn đang ở trên Ubuntu với Unity và muốn ẩn biểu tượng của ứng dụng khỏi trình khởi chạy ở phía bên trái, có thể bạn sẽ cần Qt.SplashScreen. Điều này làm việc cho tôi nhưng tôi không nhớ nếu tôi cũng cần Qt.Tool, đó là đủ trên Windows. Đối với các nỗ lực SplashScreen bạn có thể phải reimplement chức năng thay đổi kích thước vì nó vô hiệu hóa tính năng này của một QStatusBar (có một SizeGrip) ví dụ.

Here là một ví dụ nhỏ để thử cờ cửa sổ.

Các vấn đề liên quan