[PyQt] qwidget launching problem

2012-05-06 Thread Enes Albay

Hi,


If i implement my class like below:

class MainWindow(QtGui.QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
self.initUI()

def initUI():


self.showButton = QtGui.QPushButton(uKlavyeyiGoster, 
self.mainWidget)

self.showButton.resize(self.showButton.sizeHint())
self.showButton.clicked.connect(self.widgetClicked)




def widgetClicked(self):
self.newWidget = QtGui.QWidget();
self.newWidget.setGeometry(0, 0, 300, 300)
self.newWidget.show()

when i click Button, newWidget is constructed and showed. But if i 
change widgetClicked method like this:


def widgetClicked(self):
newWidget = QtGui.QWidget();
newWidget.setGeometry(0, 0, 300, 300)
newWidget.show()

when i clicked the button, it doesn't show anything. There are no 
compilation or run time errors.


What is the reason of this difference?


---
Enes Albay
___
PyQt mailing listPyQt@riverbankcomputing.com
http://www.riverbankcomputing.com/mailman/listinfo/pyqt


Re: [PyQt] qwidget launching problem

2012-05-06 Thread Phil Thompson
On Sun, 06 May 2012 20:25:15 +0300, Enes Albay albaye...@gmail.com
wrote:
 Hi,
 
 
 If i implement my class like below:
 
 class MainWindow(QtGui.QMainWindow):
  def __init__(self):
  super(MainWindow, self).__init__()
  self.initUI()
 
  def initUI():
  
  
  self.showButton = QtGui.QPushButton(uKlavyeyiGoster, 
 self.mainWidget)
  self.showButton.resize(self.showButton.sizeHint())
  self.showButton.clicked.connect(self.widgetClicked)
  
  
 
 
  def widgetClicked(self):
  self.newWidget = QtGui.QWidget();
  self.newWidget.setGeometry(0, 0, 300, 300)
  self.newWidget.show()
 
 when i click Button, newWidget is constructed and showed. But if i 
 change widgetClicked method like this:
 
 def widgetClicked(self):
  newWidget = QtGui.QWidget();
  newWidget.setGeometry(0, 0, 300, 300)
  newWidget.show()
 
 when i clicked the button, it doesn't show anything. There are no 
 compilation or run time errors.
 
 What is the reason of this difference?

In the second version you aren't keeping a reference to the widget (either
explicitly or implicitly by giving it a parent) so it is getting garbage
collected when widgetClicked() returns.

Phil
___
PyQt mailing listPyQt@riverbankcomputing.com
http://www.riverbankcomputing.com/mailman/listinfo/pyqt


Re: [PyQt] qwidget launching problem

2012-05-06 Thread Detlev Offenbach
Am Sonntag, 6. Mai 2012, 20:25:15 schrieb Enes Albay:
 Hi,
 
 
 If i implement my class like below:
 
 class MainWindow(QtGui.QMainWindow):
  def __init__(self):
  super(MainWindow, self).__init__()
  self.initUI()
 
  def initUI():
  
  
  self.showButton = QtGui.QPushButton(uKlavyeyiGoster,
 self.mainWidget)
  self.showButton.resize(self.showButton.sizeHint())
  self.showButton.clicked.connect(self.widgetClicked)
  
  
 
 
  def widgetClicked(self):
  self.newWidget = QtGui.QWidget();
  self.newWidget.setGeometry(0, 0, 300, 300)
  self.newWidget.show()
 
 when i click Button, newWidget is constructed and showed. But if i
 change widgetClicked method like this:
 
 def widgetClicked(self):
  newWidget = QtGui.QWidget();
  newWidget.setGeometry(0, 0, 300, 300)
  newWidget.show()
 
 when i clicked the button, it doesn't show anything. There are no
 compilation or run time errors.
 
 What is the reason of this difference?

The difference is called Garbage Collection. In the later case the newly 
created object is garbage collected as sson as the method returns. You have to 
keep a local reference as long as the widget is needed.

Regards,
Detlev
-- 
Detlev Offenbach
det...@die-offenbachs.de
___
PyQt mailing listPyQt@riverbankcomputing.com
http://www.riverbankcomputing.com/mailman/listinfo/pyqt


Re: [PyQt] qwidget launching problem

2012-05-06 Thread Enes Albay


On 05/06/2012 08:55 PM, Phil Thompson wrote:

 On Sun, 06 May 2012 20:25:15 +0300, Enes Albayalbaye...@gmail.com
 wrote:

 Hi,


 If i implement my class like below:

 class MainWindow(QtGui.QMainWindow):
   def __init__(self):
   super(MainWindow, self).__init__()
   self.initUI()

   def initUI():
   
   
   self.showButton = QtGui.QPushButton(uKlavyeyiGoster,
 self.mainWidget)
   self.showButton.resize(self.showButton.sizeHint())
   self.showButton.clicked.connect(self.widgetClicked)
   
   


   def widgetClicked(self):
   self.newWidget = QtGui.QWidget();
   self.newWidget.setGeometry(0, 0, 300, 300)
   self.newWidget.show()

 when i click Button, newWidget is constructed and showed. But if i
 change widgetClicked method like this:

 def widgetClicked(self):
   newWidget = QtGui.QWidget();
   newWidget.setGeometry(0, 0, 300, 300)
   newWidget.show()

 when i clicked the button, it doesn't show anything. There are no
 compilation or run time errors.

 What is the reason of this difference?

 In the second version you aren't keeping a reference to the widget (either
 explicitly or implicitly by giving it a parent) so it is getting garbage
 collected when widgetClicked() returns.

 Phil

Thanks for your quick replies, Phil and Detlev :)

___
PyQt mailing listPyQt@riverbankcomputing.com
http://www.riverbankcomputing.com/mailman/listinfo/pyqt