[PySide] Newbie with a not so newbie question

Zak pyside at m.allo.ws
Fri Dec 21 22:01:19 CET 2012


Hello David,

To create a popup window with a complex layout, you should create a 
custom Python class which inherits from QWidget and has the QLayout and 
widgets that you want. You cannot use a plain unmodified QInputDialog 
because it is too simple, you need to create a custom class to represent 
the popup window. In the code below, class MainWindow is the main window 
and class PopupWindow is the popup, and both inherit from QDialog.

This is a full working example:

# Example of how to make a popup window (second window) with complex layout.
#
# By Zak Fallows
# 2012-12-21

import sys
import os
from PySide.QtCore import *
from PySide.QtGui import *

class MainWindow(QDialog):

     def __init__(self, parent=None):
         super(MainWindow, self).__init__(parent)

         self.setWindowTitle("Main Window")

         self.top_label = QLabel("Middle of main window")

         self.bottom_button = QPushButton("Add Name")

         layout = QVBoxLayout()
         layout.addWidget(self.top_label)
         layout.addWidget(self.bottom_button)
         self.setLayout(layout)

         self.connect(self.bottom_button, SIGNAL("clicked()"),
                      self.button_clicked)

     def button_clicked(self):
         self.popup_window = PopupWindow(self)
         self.popup_window.show()

class PopupWindow(QDialog):

     def __init__(self, parent=None):
         super(PopupWindow, self).__init__(parent)

         self.setWindowTitle("Popup Window")
         layout = QGridLayout()

         line1 = QLabel("What is your first name?")
         layout.addWidget(line1, 0, 0)
         self.line1_edit = QLineEdit()
         layout.addWidget(self.line1_edit, 0, 1)

         line2 = QLabel("What is your occupation?")
         layout.addWidget(line2, 1, 0)
         self.line2_edit = QLineEdit()
         layout.addWidget(self.line2_edit, 1, 1)

         line3 = QLabel("How many years have you had this job?")
         layout.addWidget(line3, 2, 0)
         self.line3_edit = QLineEdit()
         layout.addWidget(self.line3_edit, 2, 1)

         line4 = QLabel("Do you want email?")
         layout.addWidget(line4, 3, 0)
         self.line4_checkbox = QCheckBox()
         layout.addWidget(self.line4_checkbox, 3, 1)

         self.setLayout(layout)

app = QApplication(sys.argv)

main_window = MainWindow()
main_window.resize(400, 400)
main_window.show()
# The .raise_() brings the window to the foreground, in front of other 
windows
main_window.raise_()

app.exec_()
sys.exit()

Good luck,

Zak F.

On 12/21/12 3:00 PM, litltbear at gmail.com wrote:
> Sorry in advance, this is all very new to me.
>
> I'm working with Windows 7, Python 2.6, PySide 1.1.0 and QT Creator 2.4.1.
>
> I acquired a project where the GUI was written in QT Creator, it is a 
> glorified NotePad/Editor.
> It has a text menu and an icon menu.
>
> So here is the question:
>      How do I click on an icon and get a window to pop up with 
> multiple questions, asked of the user?
>
>  I have been able to click an icon and use QInputDialog to get a popup 
> and give a single question or multiple popup's one after the other 
> with a single question, but I can't figure out how to get a single 
> window to popup with multiple questions.
>
> i.e.  Click Add Name
>     What is you first name: *input text*
>     What is you occupation?: *input text*
>     How many years have you been at this job?: *input text*
>     Check box if you want email: *check box*
>
>
> David
>
>
> _______________________________________________
> PySide mailing list
> PySide at qt-project.org
> http://lists.qt-project.org/mailman/listinfo/pyside

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/pyside/attachments/20121221/417c72d3/attachment.html>


More information about the PySide mailing list