0
from PyQt4.QtGui import QApplication, QMainWindow, QPushButton, \
        QLabel, QVBoxLayout, QWidget
from PyQt4 import QtGui
import sys

import subprocess

class MainWindow1(QMainWindow):
    def __init__(self, parent=None):
        QMainWindow.__init__(self, parent) 
        button = QPushButton('NotePad')

        label = QLabel('MainWindow1')

        centralWidget = QWidget()
        vbox = QVBoxLayout(centralWidget)
        vbox.addWidget(label)
        vbox.addWidget(button)
        self.setCentralWidget(centralWidget)

        button.clicked.connect(self.LaunchNotepad)

    # Some code here - including import subprocess
    def LaunchNotepad(self):

        returncode = subprocess.call(['python', 'notepad.py'])




if __name__ == '__main__':
    app = QApplication(sys.argv)
    mainwindow1 = MainWindow1()
    mainwindow1.show()
    sys.exit(app.exec_())

そのコードはボタン付きのメインウィンドウを作成します。ボタンを押すと、「メモ帳」というファイルをインポートしたいのですが(そうだと思います)、すぐに開いたり閉じたりします。プログラムのメモ帳を閉じるまで使用できるようにする必要があります。閉じると、元のウィンドウに戻るはずです。最終的には、3つまたは4つの異なるプログラムをインポートする3つまたは4つのボタンがあります

「importnotepad」というステートメントしかない場合は完全に実行されるため、メモ帳にエラーがあるとは思いません。

注:メモ帳ファイルは単純なテキストプログラムです(Windows PCの「メモ帳」プログラムによく似ています)。

前もって感謝します

ここで編集するのはメモ帳コードです。

import sys
import os
import datetime as dt
from PyQt4 import QtGui
from PyQt4 import *


class Notepad(QtGui.QMainWindow):
    def __init__(self):
        super(Notepad, self).__init__()
        self.initUI()






    def initUI(self):
        newAction = QtGui.QAction('New', self)
        newAction.setShortcut('Ctrl+N')
        newAction.setStatusTip('Create new file')
        newAction.triggered.connect(self.newFile)  
        saveAction = QtGui.QAction('Save', self)
        saveAction.setShortcut('Ctrl+S')
        saveAction.setStatusTip('Save current file')
        saveAction.triggered.connect(self.saveFile)
        openAction = QtGui.QAction('Open', self)
        openAction.setShortcut('Ctrl+O')
        openAction.setStatusTip('Open a file')
        openAction.triggered.connect(self.openFile)

        closeAction = QtGui.QAction('Close', self)
        closeAction.setShortcut('Ctrl+Q')
        closeAction.setStatusTip('Close Notepad')
        closeAction.triggered.connect(self.close)
        menubar = self.menuBar()

        fileMenu = menubar.addMenu('&File')
        fileMenu.addAction(newAction)
        fileMenu.addAction(saveAction)
        fileMenu.addAction(openAction)
        fileMenu.addAction(closeAction)

        #help menu
        helpMenu = menubar.addMenu('&Help')
        aboutAction = QtGui.QAction('About', self)
        aboutAction.setShortcut('Ctrl+A')
        aboutAction.setStatusTip('About')
        helpMenu.addAction(aboutAction)
        aboutAction.triggered.connect(self.about) 

        self.text = QtGui.QTextEdit(self)

        self.setCentralWidget(self.text)
        self.setGeometry(300,300,300,300)
        self.setWindowTitle('Notepad')


        self.show()
        self.statusBar()










    def newFile(self):
        self.text.clear()

    def saveFile(self):
        filename = QtGui.QFileDialog.getSaveFileName(self, 'Save File', os.getenv('HOME'))
        f = open(filename, 'w')
        filedata = self.text.toPlainText()
        f.write(filedata)
        f.close()

    def openFile(self):
        filename = QtGui.QFileDialog.getOpenFileName(self, 'Open File', os.getenv('HOME'))
        f = open(filename, 'r')
        filedata = f.read()
        self.text.setText(filedata)
        f.close()

        self.setGeometry(300,300,300,300)
        self.setWindowTitle('Notepad')
    self.show()
    def closeEvent(self, event):


        reply = QtGui.QMessageBox.question(self, 'Message',
            "Are you sure to quit?", QtGui.QMessageBox.Yes | 
            QtGui.QMessageBox.No, QtGui.QMessageBox.No)

        if reply == QtGui.QMessageBox.Yes:
            event.accept()
        else:
            event.ignore()
    def about(self, event):
        reply = QtGui.QMessageBox.question(self, 'About Task Manager',
            "This is a notepad todo list program written by craig murch")


        return Notepad



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

    sys.exit(app.exec_())

編集:上記の編集されたコードは今私がそれをしたいのですが、それは私がしたくないcmdもロードします、どうすればそれがcmdのロードを停止するのですか?

4

2 に答える 2

1

さて、あなたのメモ帳コードにはあなたが持っています

sys.exit(app.exec_())

これにより、プロセス全体が閉じます。したがって、親ウィンドウからインポートする場合は、アプリケーションを閉じる必要があります。

また、使用するGUIフレームワークに関係なく、同じプロセスでメインループを混在させることは常に悪い考えです。代わりに、を使用subprocessして他のアプリケーションを呼び出す必要があります。

# Some code here - including import subprocess
import os
def LaunchNotepad(self):
    self.DoSomething() #Or whatever you want to do before your program launches
    returncode = subprocess.call(['pythonw', 'notepad.py'],
                                 stdout=open(os.devnull, 'w'),
                                 stderr=open(os.devnull, 'w'))
    self.ShowMe() #Won't run until notepad finishes
    if not returncode:
        self.ShowError("Notepad exited abnormally!")

それはあなたができることのかなり基本的な例です。

于 2012-05-02T12:32:27.487 に答える
0

一見すると、これをクラス定義に含めても機能しないとは言えません。

app = QtGui.QApplication(sys.argv)
notepad = Notepad()

sys.exit(app.exec_())

それはあなたが守っている何かです

if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    notepad = Notepad()
    notepad.show()  # call show here
    sys.exit(app.exec_())

クラス定義の一部としてではありません。

また、self.show()withininitUIを使用することも最適ではありません。デフォルトでは、GUIオブジェクトが表示されないようにする必要があります。これは、コンポーネントをインスタンス化してから別のコンポーネントに追加する場合には意味がありません。

于 2012-05-02T12:31:16.927 に答える