Найти - Пользователи
Полная версия: Надо из программы запустить класс, который создает еще одно окно PyQt4
Начало » GUI » Надо из программы запустить класс, который создает еще одно окно PyQt4
1 2
124bit
Надо из программы запустить класс, который создает еще одно окно, а оно почему-то сразу исчезает.. что делать?)
import sys
from PyQt4 import QtGui,QtCore
from ConfigParser import SafeConfigParser as Config

class Add_PTC(QtGui.QMainWindow):
def __init__(self,PTC_list,settings):
self.seetings=settings
self.widg_list=[]
self.PTC_list=sorted(PTC_list)




QtGui.QMainWindow.__init__(self)
self.resize(700, 400)
self.cb=QtGui.QComboBox(self)
self.cb.setGeometry(10,10,110,20)
self.cb.addItems(self.PTC_list)
self.connect(self.cb,QtCore.SIGNAL('currentIndexChanged(int)'),self.chg_set_panel)
self.show()
self.rabotnikGUI('ll')
def chg_set_panel(self):
for widget in self.widg_list:
widget.destroy()
if self.cb.currentText()=='rabotnik.com.ru':
self.rabotnikGUI('ll')
def rabotnikGUI(self,settings):
self.L_login=QtGui.QLabel(self)
self.L_login.setText('login')
self.L_login.setGeometry(140,10,self.L_login.minimumSizeHint().width(),self.L_login.minimumSizeHint().height())
self.L_login.show()


self.LE_login=QtGui.QLineEdit(self)
self.LE_login.setGeometry(170,10,100,20)
self.LE_login.show()

##
self.L_password=QtGui.QLabel(self)
self.L_password.setText('password')
self.L_password.setGeometry(320,10,self.L_login.minimumSizeHint().width(),self.L_login.minimumSizeHint().height())
self.L_password.show()


self.LE_password=QtGui.QLineEdit(self)
self.LE_password.setGeometry(345,10,100,20)
self.LE_password.show()

##

self.ChB_use_proxy=QtGui.QCheckBox('use proxy',self)
self.ChB_use_proxy.setGeometry(10,50,80,20)
self.ChB_use_proxy.show()
self.proxy_choice((10,80,300,200),(40,80,300,200))
self.widg_list=[]

def proxy_choice(self,LV_proxy_list_geometry,PB_add_proxy_geometry):
self.proxyModel = QtGui.QSortFilterProxyModel()
self.proxyModel.setDynamicSortFilter(True)
#cf=Config()
#cf.read('settings.ini')
#if cf.has_section('proxies')==False:
#cf.add_section('proxies')
#cf.set('proxies','proxies_model','')
#elif cf.has_option('proxies','proxies_model'):
#cf.set('proxies','proxies_model','11')
#sett=QtCore.QSettings('settings.ini',1)
self.model=self.createProxyModel()
self.setSourceModel(self.model)
self.LV_proxy_list=QtGui.QTreeView(self)
self.LV_proxy_list.setRootIsDecorated(False)
self.LV_proxy_list.setAlternatingRowColors(True)
self.LV_proxy_list.setModel(self.proxyModel)
self.LV_proxy_list.setSortingEnabled(True)
self.LV_proxy_list.setGeometry(LV_proxy_list_geometry[0],LV_proxy_list_geometry[1],LV_proxy_list_geometry[2],LV_proxy_list_geometry[3])
self.LV_proxy_list.sortByColumn(1, QtCore.Qt.AscendingOrder)
self.LV_proxy_list.show()


self.PB_add_proxy=QtGui.QPushButton('Add proxy',self)
self.PB_add_proxy.setGeometry(PB_add_proxy_geometry[0],PB_add_proxy_geometry[1],PB_add_proxy_geometry[2],PB_add_proxy_geometry[3])
self.connect(self.PB_add_proxy, QtCore.SIGNAL('clicked()'),self.add_proxy)
self.PB_add_proxy.show()
def add_proxy(self):

add_proxy_window=Add_proxy(self)



#self.addProxy_in_model(self.model,,,,,)
#self.setSourceModel(self.model)



def setSourceModel(self, model):
self.proxyModel.setSourceModel(model)
def addProxy_in_model(model, proxy, login, password,comment):
model.insertRow(0)
model.setData(model.index(0, 0), QtCore.QVariant(proxy))
model.setData(model.index(0, 1), QtCore.QVariant(login))
model.setData(model.index(0, 2), QtCore.QVariant(password))
model.setData(model.index(0, 3), QtCore.QVariant(comment))
def createProxyModel(parent):
model = QtGui.QStandardItemModel(0, 4, parent)
model.setHeaderData(0, QtCore.Qt.Horizontal, QtCore.QVariant('proxy'))
model.setHeaderData(1, QtCore.Qt.Horizontal, QtCore.QVariant('login'))
model.setHeaderData(2, QtCore.Qt.Horizontal, QtCore.QVariant('password'))
model.setHeaderData(3, QtCore.Qt.Horizontal, QtCore.QVariant('comment'))
return model

class Add_proxy(QtGui.QWidget):
def __init__(self,parent,old_settings=['','','','']):
QtGui.QDialog.__init__(self,None)
self.resize(200,230)

self.L_paddress=QtGui.QLabel('<h4>proxy address',self)
self.L_paddress.setGeometry(5,10,self.L_paddress.minimumSizeHint().width(),self.L_paddress.minimumSizeHint().height())
self.LE_paddress=QtGui.QLineEdit(old_settings[0],self)
self.LE_paddress.setGeometry(94,7,100,20)

self.L_plogin=QtGui.QLabel('<h4>login',self)
self.L_plogin.setGeometry(5,40,self.L_plogin.minimumSizeHint().width(),self.L_plogin.minimumSizeHint().height())
self.LE_plogin=QtGui.QLineEdit(old_settings[1],self)
self.LE_plogin.setGeometry(94,37,100,20)

self.L_ppassword=QtGui.QLabel('<h4>password',self)
self.L_ppassword.setGeometry(5,70,self.L_ppassword.minimumSizeHint().width(),self.L_ppassword.minimumSizeHint().height())
self.LE_ppassword=QtGui.QLineEdit(old_settings[2],self)
self.LE_ppassword.setGeometry(94,67,100,20)

self.L_pcomment=QtGui.QLabel('<h4>comment',self)
self.L_pcomment.setGeometry(5,100,self.L_pcomment.minimumSizeHint().width(),self.L_pcomment.minimumSizeHint().height())
self.TE_pcomment=QtGui.QTextEdit(old_settings[3],self)
self.TE_pcomment.setGeometry(94,97,100,100)

##
self.PB_ok=QtGui.QPushButton('Ok',self)
self.PB_ok.setGeometry(10,202,85,23)
self.connect(self.PB_ok, QtCore.SIGNAL('clicked()'),self.oker)


self.PB_cancel=QtGui.QPushButton('Cancel',self)
self.PB_cancel.setGeometry(105,202,85,23)
self.connect(self.PB_cancel, QtCore.SIGNAL('clicked()'),self.canceler)


self.show()
def oker(self):
parent.paddress=self.LE_paddress.text()
parent.plogin=self.LE_plogin.text()
parent.ppassword=self.LE_ppassword.text()
parent.pcomment=self.TE_pcomment.text()
def canceler(self):
parent.paddress=''



sett=QtCore.QSettings('settings.ini',1)
sett.setValue('11',QtCore.QVariant(QtCore.QUrl('www.allnokia.ru')))
ls=['rabotnik.com.ru']
app = QtGui.QApplication(sys.argv)
main = Add_PTC(ls,'')
main.show()
sys.exit(app.exec_())
собствеено при нажатии кнопки add proxy должно вылазить окно класса Add_proxy… а оно появляется и сразу исчезает.. как єто исправить? И еще вопрос, как сделать, чтоб в окне не было панели с крестиком, минусиком и квадратиком?))
124bit
——HELP—–, please!!
poltergeist
Что происходит:
- идёт выполнение функции add_proxy
- создаётся новое окно, показывается, оно присваивается локальной переменной add_proxy_window
- происходит выход из функции add_proxy, при этом удаляются все локальные переменные
- окно тут же исчезает, так как был вызван его деструктор:)

1) Класс Add_proxy лучше наследовать от QDialog, тогда его вызов будет блокирующим и вышенаписанного не произойдёт.
2) Для изменения параметров окна надо поиграть с флагами: http://doc.trolltech.com/4.4/qwidget.html#windowFlags-prop. Есть наглядный хороший пример: http://doc.trolltech.com/4.4/widgets-windowflags.html
124bit
может я че-то не так понял? но даже когда я наследую от QDialog - тот же результат..
я правильно делаю:
import sys
from PyQt4 import QtGui,QtCore
from ConfigParser import SafeConfigParser as Config

class Add_PTC(QtGui.QMainWindow):
def __init__(self,PTC_list,settings):
self.seetings=settings
self.widg_list=[]
self.PTC_list=sorted(PTC_list)




QtGui.QMainWindow.__init__(self)
self.resize(700, 400)
self.cb=QtGui.QComboBox(self)
self.cb.setGeometry(10,10,110,20)
self.cb.addItems(self.PTC_list)
self.connect(self.cb,QtCore.SIGNAL('currentIndexChanged(int)'),self.chg_set_panel)
self.show()
self.rabotnikGUI('ll')
def chg_set_panel(self):
for widget in self.widg_list:
widget.destroy()
if self.cb.currentText()=='rabotnik.com.ru':
self.rabotnikGUI('ll')
def rabotnikGUI(self,settings):
self.L_login=QtGui.QLabel(self)
self.L_login.setText('login')
self.L_login.setGeometry(140,10,self.L_login.minimumSizeHint().width(),self.L_login.minimumSizeHint().height())
self.L_login.show()


self.LE_login=QtGui.QLineEdit(self)
self.LE_login.setGeometry(170,10,100,20)
self.LE_login.show()

##
self.L_password=QtGui.QLabel(self)
self.L_password.setText('password')
self.L_password.setGeometry(320,10,self.L_login.minimumSizeHint().width(),self.L_login.minimumSizeHint().height())
self.L_password.show()


self.LE_password=QtGui.QLineEdit(self)
self.LE_password.setGeometry(345,10,100,20)
self.LE_password.show()

##

self.ChB_use_proxy=QtGui.QCheckBox('use proxy',self)
self.ChB_use_proxy.setGeometry(10,50,80,20)
self.ChB_use_proxy.show()
self.proxy_choice((10,80,300,200),(40,80,300,200))
self.widg_list=[]

def proxy_choice(self,LV_proxy_list_geometry,PB_add_proxy_geometry):
self.proxyModel = QtGui.QSortFilterProxyModel()
self.proxyModel.setDynamicSortFilter(True)
#cf=Config()
#cf.read('settings.ini')
#if cf.has_section('proxies')==False:
#cf.add_section('proxies')
#cf.set('proxies','proxies_model','')
#elif cf.has_option('proxies','proxies_model'):
#cf.set('proxies','proxies_model','11')
#sett=QtCore.QSettings('settings.ini',1)
self.model=self.createProxyModel()
self.setSourceModel(self.model)
self.LV_proxy_list=QtGui.QTreeView(self)
self.LV_proxy_list.setRootIsDecorated(False)
self.LV_proxy_list.setAlternatingRowColors(True)
self.LV_proxy_list.setModel(self.proxyModel)
self.LV_proxy_list.setSortingEnabled(True)
self.LV_proxy_list.setGeometry(LV_proxy_list_geometry[0],LV_proxy_list_geometry[1],LV_proxy_list_geometry[2],LV_proxy_list_geometry[3])
self.LV_proxy_list.sortByColumn(1, QtCore.Qt.AscendingOrder)
self.LV_proxy_list.show()


self.PB_add_proxy=QtGui.QPushButton('Add proxy',self)
self.PB_add_proxy.setGeometry(PB_add_proxy_geometry[0],PB_add_proxy_geometry[1],PB_add_proxy_geometry[2],PB_add_proxy_geometry[3])
self.connect(self.PB_add_proxy, QtCore.SIGNAL('clicked()'),self.add_proxy)
self.PB_add_proxy.show()
def add_proxy(self):

add_proxy_window=Add_proxy(self)



#self.addProxy_in_model(self.model,,,,,)
#self.setSourceModel(self.model)



def setSourceModel(self, model):
self.proxyModel.setSourceModel(model)
def addProxy_in_model(model, proxy, login, password,comment):
model.insertRow(0)
model.setData(model.index(0, 0), QtCore.QVariant(proxy))
model.setData(model.index(0, 1), QtCore.QVariant(login))
model.setData(model.index(0, 2), QtCore.QVariant(password))
model.setData(model.index(0, 3), QtCore.QVariant(comment))
def createProxyModel(parent):
model = QtGui.QStandardItemModel(0, 4, parent)
model.setHeaderData(0, QtCore.Qt.Horizontal, QtCore.QVariant('proxy'))
model.setHeaderData(1, QtCore.Qt.Horizontal, QtCore.QVariant('login'))
model.setHeaderData(2, QtCore.Qt.Horizontal, QtCore.QVariant('password'))
model.setHeaderData(3, QtCore.Qt.Horizontal, QtCore.QVariant('comment'))
return model

class Add_proxy(QtGui.QDialog): ##########################
def __init__(self,parent,old_settings=['','','','']):
QtGui.QDialog.__init__(self,None)
self.resize(200,230)

self.L_paddress=QtGui.QLabel('<h4>proxy address',self)
self.L_paddress.setGeometry(5,10,self.L_paddress.minimumSizeHint().width(),self.L_paddress.minimumSizeHint().height())
self.LE_paddress=QtGui.QLineEdit(old_settings[0],self)
self.LE_paddress.setGeometry(94,7,100,20)

self.L_plogin=QtGui.QLabel('<h4>login',self)
self.L_plogin.setGeometry(5,40,self.L_plogin.minimumSizeHint().width(),self.L_plogin.minimumSizeHint().height())
self.LE_plogin=QtGui.QLineEdit(old_settings[1],self)
self.LE_plogin.setGeometry(94,37,100,20)

self.L_ppassword=QtGui.QLabel('<h4>password',self)
self.L_ppassword.setGeometry(5,70,self.L_ppassword.minimumSizeHint().width(),self.L_ppassword.minimumSizeHint().height())
self.LE_ppassword=QtGui.QLineEdit(old_settings[2],self)
self.LE_ppassword.setGeometry(94,67,100,20)

self.L_pcomment=QtGui.QLabel('<h4>comment',self)
self.L_pcomment.setGeometry(5,100,self.L_pcomment.minimumSizeHint().width(),self.L_pcomment.minimumSizeHint().height())
self.TE_pcomment=QtGui.QTextEdit(old_settings[3],self)
self.TE_pcomment.setGeometry(94,97,100,100)

##
self.PB_ok=QtGui.QPushButton('Ok',self)
self.PB_ok.setGeometry(10,202,85,23)
self.connect(self.PB_ok, QtCore.SIGNAL('clicked()'),self.oker)


self.PB_cancel=QtGui.QPushButton('Cancel',self)
self.PB_cancel.setGeometry(105,202,85,23)
self.connect(self.PB_cancel, QtCore.SIGNAL('clicked()'),self.canceler)


self.show()
def oker(self):
parent.paddress=self.LE_paddress.text()
parent.plogin=self.LE_plogin.text()
parent.ppassword=self.LE_ppassword.text()
parent.pcomment=self.TE_pcomment.text()
def canceler(self):
parent.paddress=''



sett=QtCore.QSettings('settings.ini',1)
sett.setValue('11',QtCore.QVariant(QtCore.QUrl('www.allnokia.ru')))
ls=['rabotnik.com.ru']
app = QtGui.QApplication(sys.argv)
main = Add_PTC(ls,'')
main.show()
sys.exit(app.exec_())
poltergeist
Для диалога не надо вызывать метод show() в инициализации этого же класса - это не красиво. Надо вызывать метод exec_().
124bit
пасиба… все работает)
124bit
стоп… а можете кто то, пожалуйста, привести пример, как с флагами для крестика или минусика или квадратика или рамки окна в PyQt4 работать.. ато у меня че-то не выходит и примера нигде найти не могу(( а С++ не понимаю((
poltergeist
В примерах к PyQt4 всё есть… теже примеры что и на С++, только на питоне…

З.Ы. Просто мне было легче указать на пример в онлайн документации, которая имеется к Qt (С++), а к PyQt такой доки в онлайне нет, надо смотреть по аналогии…
124bit
неа… нема… если ты найдешь - я съем свою шляпу)
http://www.riverbankcomputing.com/static/Docs/PyQt4/html/classes.html
124bit
блин… иду есть свою шляпу.. нашел((( в examples ((
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB