Reputation: 63
I need a program to open a new window from main window.
After some research i found how to do it, now im able to open another window from the first one.The problem comes when i want to hide the second window and go back to the first one.I tried self.hide()
, self.close()
, self.terminate()
, self.destroy()
.
All of them just close the second window aswell as the first one.How can i only close the second one but switch to the first one again.I need this for a settings screen.I click a button it opens settings window , you change some settings and click done.After that i would like it to come back to first window but it just closes both.
This is my code so far :
main.py:
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'E:\Hacking\Hackovi\MCheat 2.0\main.ui'
#
# Created by: PyQt5 UI code generator 5.13.0
#
# WARNING! All changes made in this file will be lost!
from AutoBowGUI import Ui_Form
from PyQt5 import QtCore, QtGui, QtWidgets
import configparser
parser = configparser.ConfigParser()
parser.read('Config.ini')
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(188, 137)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.ChatResponderB = QtWidgets.QPushButton(self.centralwidget)
self.ChatResponderB.setGeometry(QtCore.QRect(30, 10, 101, 31))
self.ChatResponderB.setObjectName("ChatResponderB")
self.ChatResponderC = QtWidgets.QCheckBox(self.centralwidget)
self.ChatResponderC.setGeometry(QtCore.QRect(10, 20, 70, 17))
self.ChatResponderC.setText("")
self.ChatResponderC.setObjectName("ChatResponderC")
self.AutoClickerB = QtWidgets.QPushButton(self.centralwidget)
self.AutoClickerB.setGeometry(QtCore.QRect(30, 50, 101, 31))
self.AutoClickerB.setObjectName("AutoClickerB")
self.AutoClickerC = QtWidgets.QCheckBox(self.centralwidget)
self.AutoClickerC.setGeometry(QtCore.QRect(10, 60, 70, 17))
self.AutoClickerC.setText("")
self.AutoClickerC.setObjectName("AutoClickerC")
self.AutoBowB = QtWidgets.QPushButton(self.centralwidget)
self.AutoBowB.setGeometry(QtCore.QRect(30, 90, 101, 31))
self.AutoBowB.setObjectName("AutoBowB")
self.AutoBowC = QtWidgets.QCheckBox(self.centralwidget)
self.AutoBowC.setGeometry(QtCore.QRect(10, 100, 70, 17))
self.AutoBowC.setText("")
self.AutoBowC.setObjectName("AutoBowC")
self.ChatResponderO = QtWidgets.QPushButton(self.centralwidget)
self.ChatResponderO.setGeometry(QtCore.QRect(130, 10, 31, 31))
self.ChatResponderO.setObjectName("ChatResponderO")
self.AutoClickerO = QtWidgets.QPushButton(self.centralwidget)
self.AutoClickerO.setGeometry(QtCore.QRect(130, 50, 31, 31))
self.AutoClickerO.setObjectName("AutoClickerO")
self.AutoBowO = QtWidgets.QPushButton(self.centralwidget)
self.AutoBowO.setGeometry(QtCore.QRect(130, 90, 31, 31))
self.AutoBowO.setObjectName("AutoBowO")
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
self.AutoBowO.clicked.connect(self.AutoBowOptions)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def AutoBowOptions(self):
self.window = QtWidgets.QMainWindow()
self.ui = Ui_Form()
self.ui.setupUi(self.window)
self.window.show()
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MCheat"))
self.ChatResponderB.setText(_translate("MainWindow", "Chat Responder"))
self.AutoClickerB.setText(_translate("MainWindow", "AutoClicker"))
self.AutoBowB.setText(_translate("MainWindow", "AutoBow"))
self.ChatResponderO.setText(_translate("MainWindow", "..."))
self.AutoClickerO.setText(_translate("MainWindow", "..."))
self.AutoBowO.setText(_translate("MainWindow", "..."))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
AutoBowGUI.py:
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'AutoBowGUI.ui'
#
# Created by: PyQt5 UI code generator 5.13.0
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
import configparser
import time
config = configparser.ConfigParser()
config.read('Config.ini')
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(220, 130)
self.pushButton = QtWidgets.QPushButton(Form)
self.pushButton.setGeometry(QtCore.QRect(60, 100, 75, 23))
self.pushButton.setObjectName("pushButton")
self.lineEdit = QtWidgets.QLineEdit(Form)
self.lineEdit.setGeometry(QtCore.QRect(90, 10, 111, 20))
self.lineEdit.setObjectName("lineEdit")
self.label = QtWidgets.QLabel(Form)
self.label.setGeometry(QtCore.QRect(10, 10, 71, 16))
self.label.setObjectName("label")
self.label_2 = QtWidgets.QLabel(Form)
self.label_2.setGeometry(QtCore.QRect(10, 40, 71, 16))
self.label_2.setObjectName("label_2")
self.lineEdit_2 = QtWidgets.QLineEdit(Form)
self.lineEdit_2.setGeometry(QtCore.QRect(90, 40, 41, 20))
self.lineEdit_2.setObjectName("lineEdit_2")
self.lineEdit_3 = QtWidgets.QLineEdit(Form)
self.lineEdit_3.setGeometry(QtCore.QRect(160, 40, 41, 20))
self.lineEdit_3.setObjectName("lineEdit_3")
self.lineEdit_4 = QtWidgets.QLineEdit(Form)
self.lineEdit_4.setGeometry(QtCore.QRect(90, 70, 41, 20))
self.lineEdit_4.setObjectName("lineEdit_4")
self.label_3 = QtWidgets.QLabel(Form)
self.label_3.setGeometry(QtCore.QRect(10, 70, 71, 16))
self.label_3.setObjectName("label_3")
self.lineEdit_5 = QtWidgets.QLineEdit(Form)
self.lineEdit_5.setGeometry(QtCore.QRect(160, 70, 41, 20))
self.lineEdit_5.setObjectName("lineEdit_5")
self.label_4 = QtWidgets.QLabel(Form)
self.label_4.setGeometry(QtCore.QRect(140, 40, 16, 16))
self.label_4.setObjectName("label_4")
self.label_5 = QtWidgets.QLabel(Form)
self.label_5.setGeometry(QtCore.QRect(140, 70, 16, 16))
self.label_5.setObjectName("label_5")
self.pushButton.clicked.connect(self.done)
self.lineEdit.setText(str(config.get("AutoBow", "drawdelay")))
self.lineEdit_2.setText(str(config.get("AutoBow", "start1")))
self.lineEdit_3.setText(str(config.get("AutoBow", "start2")))
self.lineEdit_4.setText(str(config.get("AutoBow", "pause1")))
self.lineEdit_5.setText(str(config.get("AutoBow", "pause2")))
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
def done(self, From):
config.set("AutoBow", "drawdelay", self.lineEdit.text())
config.set("AutoBow", "start1", self.lineEdit_2.text())
config.set("AutoBow", "start2", self.lineEdit_3.text())
config.set("AutoBow", "pause1", self.lineEdit_4.text())
config.set("AutoBow", "pause2", self.lineEdit_5.text())
with open('Config.ini', 'w') as configfile:
config.write(configfile)
time.sleep(0.5)
self.close()
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "AutoBow"))
self.pushButton.setText(_translate("Form", "Done"))
self.label.setText(_translate("Form", "Draw Delay"))
self.label_2.setText(_translate("Form", "Start Keybind"))
self.label_3.setText(_translate("Form", "Pause Keybind"))
self.label_4.setText(_translate("Form", "+"))
self.label_5.setText(_translate("Form", "+"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QWidget()
ui = Ui_Form()
ui.setupUi(Form)
Form.show()
sys.exit(app.exec_())
As for now my program is able to do following:
Upvotes: 0
Views: 178
Reputation: 243887
You should not modify the class generated by Qt Designer since it can generate problems, for more information read 1 and 2.
If you want a window that is used to configure some parameters then you must use QDialog so I recommend that when you build "AutoBowGUI.ui" you use that template as a base. And when you want to close the window use accept() or reject() so you can use the exec_() method.
Do not use time.sleep in the main GUI thread, if you want to perform a task after a certain time then you must use QTimer.singleShot().
I recommend using layouts to position the widgets inside the window.
The complete example is in this link.
Upvotes: 1