これはかなり単純なコードで、3つの右クリックオプションを持つシステムトレイ項目が作成されます。 1つはQDialog、もう1つのQMainWindow、Quitのインスタンスです。これは、いくつかのqdialogsを持つシステムトレイ駆動のアプリケーションのためのもので、qmainwindowはテーブルウィジェットを含んでいます(または、qdialogにテーブルを作成することはできますか?)。私はこれに1週間ほどかかりましたが、多くの関連資料を読み、それを解決する方法を理解していません。QMainWindowが別のQMainWindowから呼び出されたときに点滅して消えます
システムトレイのアイコンメニューからQDialogをクリックすると、ダイアログボックスが開き、ユーザーの操作を待ってからOKまたはCancelボタンをクリックすると、クリックされたものが印刷されます。これは、QDialogが独自のexec_()を持っているので、このように思えます。今のところ素晴らしい。
しかし、[QMainWindow]メニューオプションをクリックすると、メインウィンドウのダイアログが短時間表示され、ユーザーの入力がなくなると消えます。たぶん代わりに、qmainwindowダイアログは、おそらくapp.exec_()の直前でオブジェクトを初期化するQApplicationのexec_()に依存する必要がありますか?それがうまくいくならば、私はdef qmainwindow()がどのように情報をユーザから取得するのかについてはっきりしていません。
うまくいけば、知っている人のための簡単な問題、いくつかの変更、ビンゴ。これを実行すると、クリック可能であるシステムトレイに空白のプレースホルダがあるだろうWindows 7またはXP、Pythonの2.7、Pyside
(右クリック)、または次のことができます。
現在の環境また、 'sample.png'の代わりに実際の画像を与えます。
#!python
from PySide import QtGui, QtCore
from PySide.QtGui import QApplication, QDialog, QMainWindow
def qdialog():
qdialog_class_obj = TestClassQDialog()
qdialog_class_obj.show()
qdialog_class_obj.exec_() # wait for user
print "qdialog_user_action: ", qdialog_class_obj.qdialog_user_action
def qmainwindow():
qmainwindow_class_obj = TestClassQMainWindow()
qmainwindow_class_obj.show()
#qmainwindow_class_obj.exec_() # 'TestClassQMainWindow' object has no attribute 'exec_'
class TestClassQDialog(QDialog):
def __init__(self, parent=None):
super(TestClassQDialog, self).__init__(parent)
self.ok_cancel = QtGui.QDialogButtonBox(self)
self.ok_cancel.setStandardButtons(QtGui.QDialogButtonBox.Ok|QtGui.QDialogButtonBox.Cancel)
QtCore.QObject.connect(self.ok_cancel, QtCore.SIGNAL("accepted()"), self.button_ok)
QtCore.QObject.connect(self.ok_cancel, QtCore.SIGNAL("rejected()"), self.button_cancel)
def button_ok(self):
self.qdialog_user_action = 'ok'
self.hide()
def button_cancel(self):
self.qdialog_user_action = 'cancel'
self.hide()
class TestClassQMainWindow(QMainWindow):
def __init__(self, parent=None):
super(TestClassQMainWindow, self).__init__(parent)
self.ok_cancel = QtGui.QDialogButtonBox(self)
self.ok_cancel.setStandardButtons(QtGui.QDialogButtonBox.Cancel|QtGui.QDialogButtonBox.Ok)
QtCore.QObject.connect(self.ok_cancel, QtCore.SIGNAL("accepted()"), self.button_ok)
QtCore.QObject.connect(self.ok_cancel, QtCore.SIGNAL("rejected()"), self.button_cancel)
def button_ok(self):
self.hide()
def button_cancel(self):
self.hide()
class SysTrayIcon(QMainWindow):
def __init__(self, parent=None):
super(SysTrayIcon, self).__init__(parent)
self.qdialog_action = QtGui.QAction("QDialog", self, triggered=qdialog)
self.qmainwindow_action = QtGui.QAction("QMainWindow", self, triggered=qmainwindow)
self.quit_action = QtGui.QAction("Quit", self, triggered=QtGui.qApp.quit)
self.createSystrayIcon()
self.systrayIcon.show()
def createSystrayIcon(self):
self.systrayIconMenu = QtGui.QMenu(self)
self.systrayIconMenu.addAction(self.qdialog_action)
self.systrayIconMenu.addAction(self.qmainwindow_action)
self.systrayIconMenu.addSeparator()
self.systrayIconMenu.addAction(self.quit_action)
self.systrayIcon = QtGui.QSystemTrayIcon(self)
self.systrayIcon.setContextMenu(self.systrayIconMenu)
self.systrayIcon.setIcon(QtGui.QIcon('sample.png')) # point to a valid image if you want.
self.systrayIcon.setVisible(True)
if __name__ == '__main__':
app = QtGui.QApplication([])
systrayicon = SysTrayIcon()
app.exec_()
ありがとう。私のプログラムに取り入れ、約3k行のコードに取り組んでいます。また、connect()の追加に感謝します。 – gseattle