Ссылка на кнопку для запуска файла .py - PullRequest
2 голосов
/ 20 мая 2019

Я хочу открыть grid.py, нажав кнопку main.py.Желательно сохранять одинаковую структуру (файл пользовательского интерфейса, а также основной и сетевой файлы Python).Спасибо,

Итак, я создал простой интерфейс пользовательского интерфейса, который содержит только кнопку с Qt Designer ( test-open.ui ):

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>MainWindow</class>
 <widget class="QMainWindow" name="MainWindow">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>604</width>
    <height>424</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>MainWindow</string>
  </property>
  <widget class="QWidget" name="centralwidget">
   <widget class="QPushButton" name="pushButton">
    <property name="geometry">
     <rect>
      <x>230</x>
      <y>160</y>
      <width>75</width>
      <height>23</height>
     </rect>
    </property>
    <property name="text">
     <string>PushButton</string>
    </property>
   </widget>
  </widget>
  <widget class="QMenuBar" name="menubar">
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <width>604</width>
     <height>21</height>
    </rect>
   </property>
  </widget>
  <widget class="QStatusBar" name="statusbar"/>
 </widget>
 <resources/>
 <connections/>
</ui>

Затем я создал основной файл .py ( main.py ):

from PyQt5 import QtWidgets, uic

app = QtWidgets.QApplication([])
dlg = uic.loadUi(r"E:\Python\Project\test-open.ui")

dlg.show()
app.exec()

И, наконец, это сетка, которую я создал с помощью WxPython и которую я хочу открытьнажатие кнопки ( grid.py )

import sys

from PyQt5.QtWidgets import QMainWindow, QApplication, QWidget, QAction, QTableWidget,QTableWidgetItem,QVBoxLayout
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import pyqtSlot


class App(QWidget):

    def __init__(self):
        super().__init__()
        self.title = 'PyQt5 table - pythonspot.com'
        self.left = 0
        self.top = 0
        self.width = 460
        self.height = 200
        self.initUI()

    def initUI(self):
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)

        self.createTable()

        # Add box layout, add table to box layout and add box layout to widget
        self.layout = QVBoxLayout()
        self.layout.addWidget(self.tableWidget) 
        self.setLayout(self.layout) 

        # Show widget
        self.show()

    def createTable(self):
       # Create table
        self.tableWidget = QTableWidget()
        self.tableWidget.setRowCount(4)
        self.tableWidget.setColumnCount(4)
        self.tableWidget.setItem(0,0, QTableWidgetItem("Cell (1,1)"))
        self.tableWidget.setItem(0,1, QTableWidgetItem("Cell (1,2)"))
        self.tableWidget.setItem(0,2, QTableWidgetItem("Cell (1,1)"))
        self.tableWidget.setItem(0,3, QTableWidgetItem("Cell (1,2)"))
        self.tableWidget.setItem(0,4, QTableWidgetItem("Cell (1,1)"))

        self.tableWidget.setItem(1,0, QTableWidgetItem("Cell (1,1)"))
        self.tableWidget.setItem(1,1, QTableWidgetItem("Cell (1,2)"))
        self.tableWidget.setItem(1,2, QTableWidgetItem("Cell (1,1)"))
        self.tableWidget.setItem(1,3, QTableWidgetItem("Cell (1,2)"))
        self.tableWidget.setItem(1,4, QTableWidgetItem("Cell (1,1)"))

        self.tableWidget.setItem(2,0, QTableWidgetItem("Cell (1,1)"))
        self.tableWidget.setItem(2,1, QTableWidgetItem("Cell (1,2)"))
        self.tableWidget.setItem(2,2, QTableWidgetItem("Cell (1,1)"))
        self.tableWidget.setItem(2,3, QTableWidgetItem("Cell (1,2)"))
        self.tableWidget.setItem(2,4, QTableWidgetItem("Cell (1,1)"))

        self.tableWidget.setItem(3,0, QTableWidgetItem("Cell (1,1)"))
        self.tableWidget.setItem(3,1, QTableWidgetItem("Cell (1,2)"))
        self.tableWidget.setItem(3,2, QTableWidgetItem("Cell (1,1)"))
        self.tableWidget.setItem(3,3, QTableWidgetItem("Cell (1,2)"))
        self.tableWidget.setItem(3,4, QTableWidgetItem("Cell (1,1)"))
        self.tableWidget.move(0,0)

        # table selection change
        self.tableWidget.doubleClicked.connect(self.on_click)

    @pyqtSlot()
    def on_click(self):
        print("\n")
        for currentQTableWidgetItem in self.tableWidget.selectedItems():
            print(currentQTableWidgetItem.row(), currentQTableWidgetItem.column(), currentQTableWidgetItem.text())

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = App()
    sys.exit(app.exec_())  

1 Ответ

1 голос
/ 20 мая 2019

Вы путаете понятия, программа - это не набор файлов, а взаимодействие между объектами, созданными на основе классов.Поэтому, прежде чем что-либо реализовывать, я предполагаю, что файлы имеют следующую структуру:

├── grid.py
├── main.py
└── test-open.ui

С другой стороны, в конструкторе класса App вы показываете окно, а это не то, что вам нужно, изначально окнодолжен быть закрыт, поэтому я устраню эту линию.Переходя к точке, вы должны импортировать модуль сетки в main, чтобы иметь возможность создавать объект виджета App.

grid.py

import sys

from PyQt5.QtWidgets import (
    QMainWindow,
    QApplication,
    QWidget,
    QAction,
    QTableWidget,
    QTableWidgetItem,
    QVBoxLayout,
)
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import pyqtSlot


class App(QWidget):
    def __init__(self):
        super().__init__()
        self.title = "PyQt5 table - pythonspot.com"
        self.left = 0
        self.top = 0
        self.width = 460
        self.height = 200
        self.initUI()

    def initUI(self):
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)

        self.createTable()

        # Add box layout, add table to box layout and add box layout to widget
        self.layout = QVBoxLayout()
        self.layout.addWidget(self.tableWidget)
        self.setLayout(self.layout)

    def createTable(self):
        # Create table
        self.tableWidget = QTableWidget()
        self.tableWidget.setRowCount(4)
        self.tableWidget.setColumnCount(4)
        self.tableWidget.setItem(0, 0, QTableWidgetItem("Cell (1,1)"))
        self.tableWidget.setItem(0, 1, QTableWidgetItem("Cell (1,2)"))
        self.tableWidget.setItem(0, 2, QTableWidgetItem("Cell (1,1)"))
        self.tableWidget.setItem(0, 3, QTableWidgetItem("Cell (1,2)"))
        self.tableWidget.setItem(0, 4, QTableWidgetItem("Cell (1,1)"))

        self.tableWidget.setItem(1, 0, QTableWidgetItem("Cell (1,1)"))
        self.tableWidget.setItem(1, 1, QTableWidgetItem("Cell (1,2)"))
        self.tableWidget.setItem(1, 2, QTableWidgetItem("Cell (1,1)"))
        self.tableWidget.setItem(1, 3, QTableWidgetItem("Cell (1,2)"))
        self.tableWidget.setItem(1, 4, QTableWidgetItem("Cell (1,1)"))

        self.tableWidget.setItem(2, 0, QTableWidgetItem("Cell (1,1)"))
        self.tableWidget.setItem(2, 1, QTableWidgetItem("Cell (1,2)"))
        self.tableWidget.setItem(2, 2, QTableWidgetItem("Cell (1,1)"))
        self.tableWidget.setItem(2, 3, QTableWidgetItem("Cell (1,2)"))
        self.tableWidget.setItem(2, 4, QTableWidgetItem("Cell (1,1)"))

        self.tableWidget.setItem(3, 0, QTableWidgetItem("Cell (1,1)"))
        self.tableWidget.setItem(3, 1, QTableWidgetItem("Cell (1,2)"))
        self.tableWidget.setItem(3, 2, QTableWidgetItem("Cell (1,1)"))
        self.tableWidget.setItem(3, 3, QTableWidgetItem("Cell (1,2)"))
        self.tableWidget.setItem(3, 4, QTableWidgetItem("Cell (1,1)"))
        self.tableWidget.move(0, 0)

        # table selection change
        self.tableWidget.doubleClicked.connect(self.on_click)

    @pyqtSlot()
    def on_click(self):
        print("\n")
        for currentQTableWidgetItem in self.tableWidget.selectedItems():
            print(
                currentQTableWidgetItem.row(),
                currentQTableWidgetItem.column(),
                currentQTableWidgetItem.text(),
            )


if __name__ == "__main__":
    app = QApplication(sys.argv)
    ex = App()
    ex.show()
    sys.exit(app.exec_())

main.py

from PyQt5 import QtWidgets, uic
from grid import App


if __name__ == "__main__":
    import os
    import sys

    app = QtWidgets.QApplication(sys.argv)
    file = os.path.join(
        os.path.dirname(os.path.realpath(__file__)), "test-open.ui"
    )
    dlg = uic.loadUi(file)
    w = App()
    dlg.pushButton.clicked.connect(w.show)
    dlg.show()
    sys.exit(app.exec_())
...