1

重複の可能性:
Windows で実行されている PyQt アプリでコンソール ウィンドウを非表示にするにはどうすればよいですか?

QWebView を開くシンプルなアプリを作成しましたが、アプリ ウィンドウに加えて、Windows コンソール ウィンドウが開かれます。

この理由は何でしょうか?

import sys
import socket
from PyQt4 import QtCore, QtGui
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4.QtWebKit import QWebView

class AppWindow(QtGui.QWidget):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)        

        self.setGeometry(300, 300, 200, 25)  
        self.setWindowTitle('TrayIP')
        self.create_sys_tray()      

        self.hostname = socket.gethostname()
        self.ip = socket.gethostbyname(self.hostname)

        self.label = QLabel("IP: " + self.ip, self)
        self.label.setFont(QtGui.QFont('Helvetica', 14))

        self.timer = QTimer()
        self.connect( self.timer, QtCore.SIGNAL('timeout()'), self.timerupdate)
        self.timer.start(10000)

    def timerupdate(self):
        self.web = QWebView()
        self.web.load( QUrl('http://xxx') )

    def create_sys_tray(self):
        self.sysTray = QtGui.QSystemTrayIcon(self)
        self.sysTray.setIcon( QtGui.QIcon('ico.ico') )
        self.sysTray.setVisible(True)
        self.connect(self.sysTray, QtCore.SIGNAL("activated(QSystemTrayIcon::ActivationReason)"), self.on_sys_tray_activated)

        self.sysTrayMenu = QtGui.QMenu(self)
        act = self.sysTrayMenu.addAction("FOO")

    def on_sys_tray_activated(self, reason):        
        if self.isVisible ():
            self.setVisible(False)
        else:
            self.setVisible(True)

app = QtGui.QApplication(sys.argv)
window = AppWindow()
window.show()
sys.exit(app.exec_())
4

3 に答える 3

6

python.exe の代わりに pythonw.exe を使用する

于 2011-02-02T13:21:51.853 に答える
3

ファイルに .py ではなく .pyw という名前を付けます

于 2011-02-03T14:28:37.037 に答える
2

デフォルトの Windows インストールでは、.pyw ファイルはコンソール ウィンドウなしで開かれ (pythonw で読み込まれるため)、.py ファイルはコンソールに読み込まれます。そうです、名前を .pyw に変更するのがおそらく最も簡単な解決策です。

また、py2exe でコンパイルする場合は、"console=" を "window=" に変更する必要があります。

于 2011-02-10T15:25:02.570 に答える