Как открыть окно по кнопке из другого окна?
Я уже умею открывать окна созданные в дизайнере из другого такого же окна по кнопке. Но тут пришлось одно (зависимое) окно создавать внутри кода.
Теперь никак не могу его открыть из главного окна, точнее что-то на заднем фоне отрывается и сразу закрывается (в моем примере).
Подскажите выход.
main.py
from PyQt5 import QtCore, QtGui, QtWidgets
# from table11 import main5
class Ui_MainWindow1(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(300, 200)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget)
self.verticalLayout.setObjectName("verticalLayout")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setObjectName("pushButton")
MainWindow.setCentralWidget(self.centralwidget)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.pushButton.setText(_translate("MainWindow", "Открыть таблицу"))
self.pushButton.setGeometry(0,0,150,30)
class MyWin(QtWidgets.QMainWindow, Ui_MainWindow1):
def __init__(self):
super(MyWin, self).__init__()
self.setupUi(self)
self.pushButton.clicked.connect(self.ggg)
def ggg(self):
from table11 import main5
main5(sys.argv)
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
window = MyWin()
window.show()
sys.exit(app.exec_())
table.py
from PyQt5.QtCore import QFile, QFileInfo, Qt
from PyQt5.QtGui import QStandardItem, QStandardItemModel
from PyQt5.QtWidgets import QApplication, QHeaderView, QTableView, QLabel, QMainWindow, QPushButton, QToolBar, QAction
from ctypes import windll
widht_mon = round(windll.user32.GetSystemMetrics(0)/2)
height_mon = windll.user32.GetSystemMetrics(1)
import sys
class Window2(QMainWindow):
def __init__(self, parent=None):
super().__init__()
self.setWindowTitle("TABLE")
self.resize(800, 800)
self.createActions()
self.createToolBars()
def createActions(self):
self.newAction = QAction( "&New", self)
self.openAction = QAction( "&Open...", self)
self.saveAction1 = QAction( "&Save", self)
self.saveAction2 = QAction("&SaveAsEx", self)
self.saveAction3 = QAction("&SaveAsLog", self)
def createToolBars(self):
fileToolBar = self.addToolBar("File")
fileToolBar.addAction(self.newAction)
fileToolBar.addAction(self.openAction)
fileToolBar.addAction(self.saveAction1)
fileToolBar.addAction(self.saveAction2)
fileToolBar.addAction(self.saveAction3)
class FreezeTableWidget(QTableView):
def __init__(self, model):
super().__init__()
self.setModel(model)
self.frozenTableView = QTableView(self)
self.init()
self.frozenTableView.horizontalScrollBar().valueChanged.connect(
self.horizontalScrollBar().setValue)
self.horizontalScrollBar().valueChanged.connect(
self.frozenTableView.horizontalScrollBar().setValue)
def init(self):
self.frozenTableView.setModel(self.model())
self.horizontalHeader().sectionResized.connect(self.updateSectionWidth)
self.frozenTableView.setFocusPolicy(Qt.NoFocus)
self.frozenTableView.horizontalHeader().hide()
self.frozenTableView.verticalHeader().verticalOffset()
self.frozenTableView.verticalHeader().setFixedWidth(100)
self.frozenTableView.verticalHeader().setSectionResizeMode(QHeaderView.Fixed)
self.viewport().stackUnder(self.frozenTableView)
self.frozenTableView.setStyleSheet('''
QTableView { border: none;
background-color: #8EDE21;
selection-background-color: #999;
}''') # for demo purposes
self.frozenTableView.setSelectionModel(self.selectionModel())
for row1 in range(3, self.model().rowCount()):
self.frozenTableView.setRowHidden(row1, True)
self.frozenTableView.setColumnWidth(0, self.columnWidth(0))
self.frozenTableView.setHorizontalScrollBarPolicy(1)
self.frozenTableView.setVerticalScrollBarPolicy(1)
self.frozenTableView.show()
self.updateFrozenTableGeometry()
self.setHorizontalScrollMode(self.ScrollPerPixel)
self.setVerticalScrollMode(self.ScrollPerPixel)
self.frozenTableView.setVerticalScrollMode(self.ScrollPerPixel)
self.frozenTableView.setHorizontalScrollMode(self.ScrollPerPixel)
def updateSectionWidth(self, logicalIndex, newSize):
self.frozenTableView.setColumnWidth(logicalIndex, newSize)
def resizeEvent(self, event):
super(FreezeTableWidget, self).resizeEvent(event)
self.updateFrozenTableGeometry()
def updateFrozenTableGeometry(self):
self.frozenTableView.setGeometry(
self.frameWidth(),
self.horizontalHeader().height(), self.viewport().width()+95,
3*self.rowHeight(0))
def main5(args):
def split_and_strip(s, splitter):
return [s.strip() for s in line.split(splitter)]
app5 = QApplication(args)
model = QStandardItemModel()
file = QFile(QFileInfo(__file__).absolutePath() + '/tables11.txt')
if file.open(QFile.ReadOnly):
line = file.readLine(1000).decode('utf-8')
header = split_and_strip(line, ',')
model.setVerticalHeaderLabels(header)
row = 0
while file.canReadLine():
line = file.readLine(1000).decode('utf-8')
if not line.startswith('#') and ',' in line:
fields = split_and_strip(line, ',')
for col, field in enumerate(fields):
newItem = QStandardItem(field)
model.setItem(row, col, newItem)
row += 1
file.close()
tableView = FreezeTableWidget(model)
tableView.setWindowTitle("Frozen Column Example")
tableView.resize(widht_mon, height_mon)
tableView.verticalHeader().setFixedWidth(100)
win = Window2()
win.setCentralWidget(tableView)
win.resize(widht_mon, height_mon)
win.show()
sys.exit(app5.exec_())
main5(sys.argv)
tables11.txt
Параметр1, Параметр2, Параметр3, , Разъем11, Разъем12, Разъем13, Разъем13, Разъем14, Разъем15, Разъем16, Разъем17, Разъем18, Разъем19 , , Разъем21, Разъем22, Разъем23, Разъем24, Разъем25, Разъем26 , Разъем27, Разъем28, Разъем29, , Разъем31, Разъем32, Разъем33 , Разъем34, Разъем35, Разъем36, Разъем37, Разъем38, Разъем39, , Разъем41, Разъем42 , Разъем43, Разъем44
1, , 5.2, , , I , I , , , I
2, , 5.3, , , II , II , 11, , II
3, 3, 5.4, , , III , III , 12, , I
,
4, 4, 5.5, 4a , VD , IV , IV , 12, , III
5, 5-, 5.6, , S , V- , V , 13, 5-, II
5, 5, 5.7, 4b , HS , V , VI , 14, 5, IV
6, , , 4c , , V+ , , 15, ,
7, 5+, 5.8, , VS , VI- , VIIa , 16, 5, IV
8, 6-, 5.9, 5a , HVS , VI , VIIb , 17, , V
9, 6-/6 , 5.10a , , E1 , VI+ , VIIc , 18, 6-, VI
10, , 5.10b , 5b , , , , 19, , VI/VI+
11, 6, 5.10c , , E2 , VII- , VIIIa , 20, 6, V
12, 6+, 5.10d , 5c , , VII , VIIIb , 21, , V
,
13, 7-, 5.11a , , E3 , VII+ , VIIIc , 22, 6, 7
14, 7, 5.11b , , , , , 23, , 7b
15, 7+, 5.11c , 6a , E4 , VIII- , IXa , 24, 7-, 7
16, 7+/8- , 5.11d , , , VIII , IXb , , , 7c
17, 8-, 5.12a , , E5 , VIII+ , IXc , 25, 7, 8a
18, 8, 5.12b , 6b , , , , 26, 8-, 8b
19, 8/8+ , 5.12c , , E6 , IX- , Xa , 27, 8, 8c
20, 8+, 5.12d , 6c , , IX , Xb , 28, 8, 9a
21, 9-, 5.13a , , E7 , IX+ , Xc , 29, 9-, 9b
,
22, 9-, 5.13a , , E7 , IX+ , Xc , 29, 9-, 9b
23, 9-, 5.13a , , E7 , IX+ , Xc , 29, 9-, 9b
24, 9-, 5.13a , , E7 , IX+ , Xc , 29, 9-, 9b
25, 9-, 5.13a , , E7 , IX+ , Xc , 29, 9-, 9b
26, 9-, 5.13a , , E7 , IX+ , Xc , 29, 9-, 9b
Источник: Stack Overflow на русском