Щупаю этот ваш PyQt и весьма радуюсь, а также постоянно сталкиваюсь с проблемами. Я застопорился на элементарном. Структура приложения: главное окно (QWidget) в котором есть кнопочка выбрать файл. После того как файл выбран, то полное имя файла помещается в QLineEdit. Выбранный файл должен открываться в новом окне. Проблема в том, что я не могу передать значение.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import sys
from PyQt4.QtGui import *
from PyQt4.QtCore import *
class MainWindow(QWidget):
def __init__(self):
super(MainWindow, self).__init__()
self.setWindowTitle("Title")
self.setWindowIcon(QIcon('icon.png'))
self.setGeometry(500, 300, 600, 100)
boxlay = QHBoxLayout(self)
frame = QFrame(self)
frame.setFrameShape(QFrame.StyledPanel)
frame.setFrameShadow(QFrame.Raised)
gridlay = QGridLayout(frame)
self.open_button = QPushButton("Select file", frame)
self.compile_button = QPushButton("Compile", frame)
self.clear_button = QPushButton("Clear", frame)
self.show_scenario = QPushButton("View file", frame)
self.scenario_line = QLineEdit(frame)
self.dialogWindow = OpenScenario()
self.output_compiler = QPlainTextEdit(frame)
self.output_compiler.setFixedSize(1280, 400)
gridlay.addWidget(self.open_button, 0, 1)
gridlay.addWidget(self.compile_button, 0, 2)
gridlay.addWidget(self.clear_button, 0, 3)
gridlay.addWidget(self.show_scenario, 0, 4)
gridlay.addWidget(self.scenario_line, 4, 0, 1, 5)
gridlay.addWidget(self.output_compiler, 5, 0, 1, 5)
self.clear_button.setEnabled(False)
self.compile_button.setEnabled(False)
self.output_compiler.setEnabled(False)
# self.show_scenario.setEnabled(False)
boxlay.addWidget(frame)
self.open_button.clicked.connect(self.dialog)
self.clear_button.clicked.connect(self.clear_test_field)
self.scenario_line.textChanged.connect(self.enable_buttons)
self.show_scenario.clicked.connect(self.on_pushButton_clicked)
@pyqtSlot()
def on_pushButton_clicked(self):
self.dialogWindow.exec_()
def dialog(self):
scenario = QFileDialog.getOpenFileName(
self,
"Select file",
"/home/amazpyel",
"XML (*.xml)"
)
if scenario:
self.scenario_line.setText(scenario)
self.compile_button.setEnabled(True)
self.clear_button.setEnabled(True)
self.compile_button.clicked.connect(lambda: self.compile_file(scenario))
def compile_file(self, test):
print test
self.output_compiler.setEnabled(True)
scenario = str(test)
os.system(
"/home/amazpyel/example" + "-c" + scenario + ">" + scenario + ".log")
self.output_log(test + ".log")
def clear_test_field(self):
self.scenario_line.clear()
self.output_compiler.clear()
self.compile_button.setEnabled(False)
self.clear_button.setEnabled(False)
self.output_compiler.setEnabled(False)
def enable_buttons(self):
self.clear_button.setEnabled(True)
self.compile_button.setEnabled(True)
def output_log(self, file):
text = open(file).read()
self.output_compiler.setPlainText(text)
class OpenScenario(QDialog):
def __init__(self):
super(OpenScenario, self).__init__()
self.setGeometry(500, 300, 1280, 800)
self.setFixedSize(self.size())
self.setWindowTitle("/home/amazpyel/file.xml")
boxlay_child = QHBoxLayout(self)
frame_child = QFrame(self)
frame_child.setFrameShape(QFrame.StyledPanel)
frame_child.setFrameShadow(QFrame.Raised)
gridlay_child = QGridLayout(frame_child)
self.scenario_view = QPlainTextEdit(frame_child)
self.scenario_view.setFixedSize(1280, 800)
gridlay_child.addWidget(self.scenario_view, 0, 1)
self.verticalLayout = QVBoxLayout(self)
self.verticalLayout.addWidget(self.scenario_view)
boxlay_child.addWidget(frame_child)
sce = "/home/amazpyel/files.xml"
def open_scenario(self, sce):
scenario_output = open(sce).read()
self.scenario_view.setPlainText(scenario_output)
open_scenario(self, sce)
app = QApplication(sys.argv)
sc = MainWindow()
sc.show()
sc.setFixedSize(sc.size())
sys.exit(app.exec_())
Я хотел передать в класс OpenScenario значение scenario_line из класса MainWindow и не вышло.