Issue
I have a question. Although some questions are similar with mine, but i cat't find how to resolve. I create a login window, when click 'Confirm' button, hope to load a new window. But now the new window will show and close immediately.The code is below:
# -*- coding: utf-8 -*-
import sys
import time
from PySide.QtCore import *
from PySide.QtGui import *
import login
import moreFrame_modify
class show_login(QWidget,login.Ui_Form):
def __init__(self,parent=None):
super(show_login,self).__init__(parent)
self.ui = login.Ui_Form()
self.ui.setupUi(self)
def show_notepad_clk(self): #This function will trigger a new window
print "Hello world!"
# farm.destroy()
time.sleep(1)
showMemoUI().show()
def exit_login_show(self):
time.sleep(.1)
exit()
# self.destroy()
def create_new_user(self):
print "Create"
QInputDialog.getText(self, 'Input Dialog', 'Enter your name:')
class showMemoUI(QWidget,moreFrame_modify.Ui_Form):
def __init__(self,parent=None):
super(showMemoUI,self).__init__(parent)
self.ui = moreFrame_modify.Ui_Form()
print "Start show"
self.ui.setupUi(self)
print "Show notepad UI"
if __name__=='__main__':
app = QApplication(sys.argv)
farm = show_login()
farm.show()
# farm = showMemoUI()
# farm.show()
sys.exit(app.exec_())
login.py # -- coding: utf-8 --
# Form implementation generated from reading ui file 'login.ui'
#
# Created: Mon Nov 12 17:25:34 2018
# by: pyside-uic 0.2.15 running on PySide 1.2.4
#
# WARNING! All changes made in this file will be lost!
from PySide import QtCore, QtGui
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(291, 207)
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap(":/a15.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
Form.setWindowIcon(icon)
self.verticalLayout_3 = QtGui.QVBoxLayout(Form)
self.verticalLayout_3.setObjectName("verticalLayout_3")
self.verticalLayout_2 = QtGui.QVBoxLayout()
self.verticalLayout_2.setSpacing(20)
self.verticalLayout_2.setContentsMargins(20, -1, 20, 20)
self.verticalLayout_2.setObjectName("verticalLayout_2")
self.horizontalLayout = QtGui.QHBoxLayout()
self.horizontalLayout.setObjectName("horizontalLayout")
self.label = QtGui.QLabel(Form)
font = QtGui.QFont()
font.setPointSize(10)
self.label.setFont(font)
self.label.setObjectName("label")
self.horizontalLayout.addWidget(self.label)
self.userTxt = QtGui.QLineEdit(Form)
self.userTxt.setObjectName("userTxt")
self.horizontalLayout.addWidget(self.userTxt)
self.verticalLayout_2.addLayout(self.horizontalLayout)
self.horizontalLayout_2 = QtGui.QHBoxLayout()
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
self.label_2 = QtGui.QLabel(Form)
font = QtGui.QFont()
font.setPointSize(10)
self.label_2.setFont(font)
self.label_2.setObjectName("label_2")
self.horizontalLayout_2.addWidget(self.label_2)
self.pwdTxt = QtGui.QLineEdit(Form)
self.pwdTxt.setObjectName("pwdTxt")
self.horizontalLayout_2.addWidget(self.pwdTxt)
self.verticalLayout_2.addLayout(self.horizontalLayout_2)
self.verticalLayout = QtGui.QVBoxLayout()
self.verticalLayout.setSpacing(10)
self.verticalLayout.setObjectName("verticalLayout")
self.horizontalLayout_3 = QtGui.QHBoxLayout()
self.horizontalLayout_3.setObjectName("horizontalLayout_3")
self.confirmBtn = QtGui.QPushButton(Form)
font = QtGui.QFont()
font.setPointSize(10)
self.confirmBtn.setFont(font)
self.confirmBtn.setObjectName("confirmBtn")
self.horizontalLayout_3.addWidget(self.confirmBtn)
self.cancelBtn = QtGui.QPushButton(Form)
font = QtGui.QFont()
font.setPointSize(10)
self.cancelBtn.setFont(font)
self.cancelBtn.setObjectName("cancelBtn")
self.horizontalLayout_3.addWidget(self.cancelBtn)
self.verticalLayout.addLayout(self.horizontalLayout_3)
self.regeisterBtn = QtGui.QPushButton(Form)
font = QtGui.QFont()
font.setPointSize(10)
self.regeisterBtn.setFont(font)
self.regeisterBtn.setObjectName("regeisterBtn")
self.verticalLayout.addWidget(self.regeisterBtn)
self.verticalLayout_2.addLayout(self.verticalLayout)
self.verticalLayout_3.addLayout(self.verticalLayout_2)
self.retranslateUi(Form)
QtCore.QObject.connect(self.confirmBtn, QtCore.SIGNAL("clicked()"), Form.show_notepad_clk)
QtCore.QObject.connect(self.cancelBtn, QtCore.SIGNAL("clicked()"), Form.exit_login_show)
QtCore.QObject.connect(self.regeisterBtn, QtCore.SIGNAL("clicked()"), Form.create_new_user)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
Form.setWindowTitle(QtGui.QApplication.translate("Form", "Login", None, QtGui.QApplication.UnicodeUTF8))
self.label.setText(QtGui.QApplication.translate("Form", "UserName", None, QtGui.QApplication.UnicodeUTF8))
self.label_2.setText(QtGui.QApplication.translate("Form", "Password", None, QtGui.QApplication.UnicodeUTF8))
self.confirmBtn.setText(QtGui.QApplication.translate("Form", "Confirm", None, QtGui.QApplication.UnicodeUTF8))
self.cancelBtn.setText(QtGui.QApplication.translate("Form", "Cancer", None, QtGui.QApplication.UnicodeUTF8))
self.regeisterBtn.setText(QtGui.QApplication.translate("Form", "Add a new user", None, QtGui.QApplication.UnicodeUTF8))
import myresource_rc
moreFrame_modify.py
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'moreFrame_modify.ui'
#
# Created: Mon Nov 12 17:25:38 2018
# by: pyside-uic 0.2.15 running on PySide 1.2.4
#
# WARNING! All changes made in this file will be lost!
from PySide import QtCore, QtGui
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(469, 458)
font = QtGui.QFont()
font.setFamily("Yu Gothic UI Semibold")
font.setWeight(75)
font.setBold(True)
Form.setFont(font)
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap(":/a11.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
Form.setWindowIcon(icon)
self.horizontalLayout_10 = QtGui.QHBoxLayout(Form)
self.horizontalLayout_10.setObjectName("horizontalLayout_10")
self.horizontalLayout_9 = QtGui.QHBoxLayout()
self.horizontalLayout_9.setObjectName("horizontalLayout_9")
self.frame_3 = QtGui.QFrame(Form)
self.frame_3.setFrameShape(QtGui.QFrame.StyledPanel)
self.frame_3.setFrameShadow(QtGui.QFrame.Raised)
self.frame_3.setObjectName("frame_3")
self.horizontalLayout_4 = QtGui.QHBoxLayout(self.frame_3)
self.horizontalLayout_4.setObjectName("horizontalLayout_4")
self.verticalLayout = QtGui.QVBoxLayout()
self.verticalLayout.setObjectName("verticalLayout")
self.horizontalLayout_2 = QtGui.QHBoxLayout()
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
self.label = QtGui.QLabel(self.frame_3)
font = QtGui.QFont()
font.setFamily("Yu Gothic UI Semibold")
font.setPointSize(12)
font.setWeight(75)
font.setBold(True)
self.label.setFont(font)
self.label.setObjectName("label")
self.horizontalLayout_2.addWidget(self.label)
self.dateEdit = QtGui.QDateEdit(self.frame_3)
self.dateEdit.setObjectName("dateEdit")
self.horizontalLayout_2.addWidget(self.dateEdit)
self.verticalLayout.addLayout(self.horizontalLayout_2)
self.horizontalLayout_3 = QtGui.QHBoxLayout()
self.horizontalLayout_3.setObjectName("horizontalLayout_3")
self.label_2 = QtGui.QLabel(self.frame_3)
font = QtGui.QFont()
font.setFamily("Yu Gothic UI Semibold")
font.setPointSize(12)
font.setWeight(75)
font.setBold(True)
self.label_2.setFont(font)
self.label_2.setObjectName("label_2")
self.horizontalLayout_3.addWidget(self.label_2)
self.timeEdit = QtGui.QTimeEdit(self.frame_3)
self.timeEdit.setObjectName("timeEdit")
self.horizontalLayout_3.addWidget(self.timeEdit)
self.verticalLayout.addLayout(self.horizontalLayout_3)
self.horizontalLayout = QtGui.QHBoxLayout()
self.horizontalLayout.setObjectName("horizontalLayout")
self.label_3 = QtGui.QLabel(self.frame_3)
font = QtGui.QFont()
font.setFamily("Yu Gothic UI Semibold")
font.setPointSize(12)
font.setWeight(75)
font.setBold(True)
self.label_3.setFont(font)
self.label_3.setObjectName("label_3")
self.horizontalLayout.addWidget(self.label_3)
self.addrTxt = QtGui.QLineEdit(self.frame_3)
self.addrTxt.setObjectName("addrTxt")
self.horizontalLayout.addWidget(self.addrTxt)
self.verticalLayout.addLayout(self.horizontalLayout)
self.horizontalLayout_5 = QtGui.QHBoxLayout()
self.horizontalLayout_5.setObjectName("horizontalLayout_5")
self.label_4 = QtGui.QLabel(self.frame_3)
font = QtGui.QFont()
font.setFamily("Yu Gothic UI Semibold")
font.setPointSize(12)
font.setWeight(75)
font.setBold(True)
self.label_4.setFont(font)
self.label_4.setObjectName("label_4")
self.horizontalLayout_5.addWidget(self.label_4)
self.commTxt = QtGui.QLineEdit(self.frame_3)
self.commTxt.setObjectName("commTxt")
self.horizontalLayout_5.addWidget(self.commTxt)
self.verticalLayout.addLayout(self.horizontalLayout_5)
self.textBrowser = QtGui.QTextBrowser(self.frame_3)
self.textBrowser.setObjectName("textBrowser")
self.verticalLayout.addWidget(self.textBrowser)
self.horizontalLayout_4.addLayout(self.verticalLayout)
self.verticalLayout_2 = QtGui.QVBoxLayout()
self.verticalLayout_2.setObjectName("verticalLayout_2")
self.pushButton_4 = QtGui.QPushButton(self.frame_3)
font = QtGui.QFont()
font.setFamily("Yu Gothic UI Semibold")
font.setPointSize(12)
font.setWeight(75)
font.setBold(True)
self.pushButton_4.setFont(font)
self.pushButton_4.setObjectName("pushButton_4")
self.verticalLayout_2.addWidget(self.pushButton_4)
self.pushButton_5 = QtGui.QPushButton(self.frame_3)
font = QtGui.QFont()
font.setFamily("Yu Gothic UI Semibold")
font.setPointSize(12)
font.setWeight(75)
font.setBold(True)
self.pushButton_5.setFont(font)
self.pushButton_5.setObjectName("pushButton_5")
self.verticalLayout_2.addWidget(self.pushButton_5)
self.pushButton_6 = QtGui.QPushButton(self.frame_3)
font = QtGui.QFont()
font.setFamily("Yu Gothic UI Semibold")
font.setPointSize(12)
font.setWeight(75)
font.setBold(True)
self.pushButton_6.setFont(font)
self.pushButton_6.setObjectName("pushButton_6")
self.verticalLayout_2.addWidget(self.pushButton_6)
spacerItem = QtGui.QSpacerItem(20, 293, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
self.verticalLayout_2.addItem(spacerItem)
self.horizontalLayout_4.addLayout(self.verticalLayout_2)
self.horizontalLayout_9.addWidget(self.frame_3)
self.horizontalLayout_10.addLayout(self.horizontalLayout_9)
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
Form.setWindowTitle(QtGui.QApplication.translate("Form", "Notepad", None, QtGui.QApplication.UnicodeUTF8))
self.label.setText(QtGui.QApplication.translate("Form", "Date", None, QtGui.QApplication.UnicodeUTF8))
self.label_2.setText(QtGui.QApplication.translate("Form", "Time", None, QtGui.QApplication.UnicodeUTF8))
self.label_3.setText(QtGui.QApplication.translate("Form", "Address", None, QtGui.QApplication.UnicodeUTF8))
self.label_4.setText(QtGui.QApplication.translate("Form", "Comment", None, QtGui.QApplication.UnicodeUTF8))
self.pushButton_4.setText(QtGui.QApplication.translate("Form", "Save", None, QtGui.QApplication.UnicodeUTF8))
self.pushButton_5.setText(QtGui.QApplication.translate("Form", "Cancel", None, QtGui.QApplication.UnicodeUTF8))
self.pushButton_6.setText(QtGui.QApplication.translate("Form", "About", None, QtGui.QApplication.UnicodeUTF8))
import myresource_rc
Add login.py and moreFrame_Modify.py ,these two files are generated by QT designer.
Solution
In your case you have 2 errors:
You should not use
time.sleep()
in a GUI, in the case of Qt you should useQTimer
sincetime.sleep()
freezes the GUI.A local variable created in a function only exists as long as the function is executed, in your case
showMemoUI
is shown and instantly eliminated, therefore the new window is not observed. The solution is to make the new window member of the class.
Using the above, the solution code is:
import sys
from PySide import QtCore, QtGui
import login
import moreFrame_modify
class show_login(QtGui.QWidget, login.Ui_Form):
def __init__(self,parent=None):
super(show_login,self).__init__(parent)
self.setupUi(self)
self.showmemoui = showMemoUI()
def show_notepad_clk(self): #This function will trigger a new window
print("Hello world!")
QtCore.QTimer.singleShot(1000, self.showmemoui.show)
def exit_login_show(self):
QtCore.QTimer.singleShot(100, QtGui.QApplication.quit)
def create_new_user(self):
print("Create")
QtGui.QInputDialog.getText(self, 'Input Dialog', 'Enter your name:')
class showMemoUI(QtGui.QWidget, moreFrame_modify.Ui_Form):
def __init__(self, parent=None):
super(showMemoUI,self).__init__(parent)
print("Start show")
self.setupUi(self)
print("Show notepad UI")
if __name__=='__main__':
app = QtGui.QApplication(sys.argv)
farm = show_login()
farm.show()
sys.exit(app.exec_())
Answered By - eyllanesc
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.