Python 链接按钮以运行.py文件

Python 链接按钮以运行.py文件,python,pyqt,pyqt5,qt-designer,qpushbutton,Python,Pyqt,Pyqt5,Qt Designer,Qpushbutton,我想做的是通过单击main.py上的按钮打开grid.py。最好保持相同的结构(ui文件以及主python文件和网格python文件)。谢谢, 因此,我创建了一个简单的UI界面,其中只包含一个带有Qt设计器的按钮(test open.UI): 最后,这是我用WxPython创建的一个网格,我想通过点击按钮(Grid.py)打开它 您混淆了这些概念,程序不是一组文件,而是基于类创建的对象之间的交互。因此,在实现任何内容之前,我将假设文件具有以下结构: ├── grid.py ├── main.py

我想做的是通过单击main.py上的按钮打开grid.py。最好保持相同的结构(ui文件以及主python文件和网格python文件)。谢谢,

因此,我创建了一个简单的UI界面,其中只包含一个带有Qt设计器的按钮(test open.UI):

最后,这是我用WxPython创建的一个网格,我想通过点击按钮(Grid.py)打开它


您混淆了这些概念,程序不是一组文件,而是基于类创建的对象之间的交互。因此,在实现任何内容之前,我将假设文件具有以下结构:

├── grid.py
├── main.py
└── test-open.ui
另一方面,在应用程序类构造函数中,您正在显示窗口,而这不是您想要的,最初必须关闭窗口,因此我将删除该行。说到这里,您必须在main中导入网格模块才能创建应用程序小部件对象

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_())  
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

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_())  
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_())
从PyQt5导入QtWidgets,uic
从网格导入应用程序
如果名称=“\uuuuu main\uuuuuuuu”:
导入操作系统
导入系统
app=qtwidts.QApplication(sys.argv)
file=os.path.join(
os.path.dirname(os.path.realpath(_文件__)),“test open.ui”
)
dlg=uic.loadUi(文件)
w=App()
dlg.按钮.点击.连接(w.show)
dlg.show()
sys.exit(app.exec_())

谢谢@eyllanesc,效果很好。你说的是哪一行显示窗口?最后一个问题,如果我的main.py上有两个按钮,我如何区分单击了哪一个?@CreekBarbara 1)显示窗口的行是.ui中的以下
dlg.button.clicked.connect(w.show)
2)每个按钮都有一个名称:
,因此,如果你有另一个按钮,它将有另一个名称。我在你发布答案的同时计算出了这个名称:)。对于第一个问题,我问的是关于你从我的代码中删除的那一行,我不能把我的手指放在上面。非常感谢。again@CreekBarbara这行代码显示小部件self.Show()