How to show all UI from another python file in current file when button is clicked.
-
@sdf1444 you do realise that you are basically asking us to do your work for you ? You were already given several good starting points but you didn't even show anything you tried to get things working.
Hi
Here is some code to display widgets in pyqt5. But how do I allow the code so that it displays the imported widget from another file in the same python file/window without creating a new window for the new widget.
import sys from PyQt5.QtWidgets import * from PyQt5.QtCore import * from pyqt2 import * class App(QWidget): def __init__(self): QMainWindow.__init__(self) pybutton = QPushButton('Click me', self) pybutton.resize(200,70) pybutton.move(400, 50) self.show() if __name__ == "__main__": app = QApplication(sys.argv) mainWin = App() mainWin2 = App2() sys.exit(app.exec_())
Here is also the code for the imported python file:
import sys from PyQt5.QtWidgets import * from PyQt5.QtCore import * class App2(QWidget): def __init__(self): QMainWindow.__init__(self) pybutton = QPushButton('hi', self) pybutton.resize(200,70) pybutton.move(900, 50) self.show()
-
Hi
It seems you can use a string as class name and in that way maybe do it
with
https://stackoverflow.com/questions/553784/can-you-use-a-string-to-instantiate-a-class
combined with
https://stackoverflow.com/questions/1796180/how-can-i-get-a-list-of-all-classes-within-current-module-in-python
so you import module , build stringlist and
then use thedef construct(self, builderName): targetClass = getattr(idClasses, builderName) instance = targetClass() self.allClasses.append(instance)
to actually construct a list of instances.
Then you can insert into your main window to show.
Hi
Here is some code to display widgets in pyqt5. But how do I allow the code so that it displays the imported widget from another file in the same python file/window without creating a new window for the new widget.
import sys from PyQt5.QtWidgets import * from PyQt5.QtCore import * from pyqt2 import * class App(QWidget): def init(self): QMainWindow.init(self) pybutton = QPushButton('Click me', self) pybutton.resize(200,70) pybutton.move(400, 50) self.show() if name == "main": app = QApplication(sys.argv) mainWin = App() mainWin2 = App2() sys.exit(app.exec_())
Here is also the code for the imported python file:
import sys from PyQt5.QtWidgets import * from PyQt5.QtCore import * class App2(QWidget): def init(self): QMainWindow.init(self) pybutton = QPushButton('hi', self) pybutton.resize(200,70) pybutton.move(900, 50) self.show()
-
Hi
Widgets that do not get a parent assigned, will become windows.
So normally you would insert the imported widgets into a
layout on the mainwindow. -
Hi
Widgets that do not get a parent assigned, will become windows.
So normally you would insert the imported widgets into a
layout on the mainwindow. -
Hi
How do I do this? What is the code for this because I really don't understand how to do it.
Thanks very much much appreciated with also your help.
@sdf1444
well something like
layout = QHBoxLayout()
layout.addWidget(button1) // button1 would be your imported widget instancewindow.setLayout(layout)
window.show()window most like being mainwindow
its a good idea to read about layouts
https://doc.qt.io/qtforpython/overviews/layout.html
so you know what you are using :) -
@sdf1444
well something like
layout = QHBoxLayout()
layout.addWidget(button1) // button1 would be your imported widget instancewindow.setLayout(layout)
window.show()window most like being mainwindow
its a good idea to read about layouts
https://doc.qt.io/qtforpython/overviews/layout.html
so you know what you are using :) -
@sdf1444
well something like
layout = QHBoxLayout()
layout.addWidget(button1) // button1 would be your imported widget instancewindow.setLayout(layout)
window.show()window most like being mainwindow
its a good idea to read about layouts
https://doc.qt.io/qtforpython/overviews/layout.html
so you know what you are using :) -
Hi
but a widget is a class. ?
so you import, you create an instance and insert into layout.It should not be an issue to integrate it with the code you have.
Maybe you already have a layout. else now would be a good time to use one :) -
Hi
but a widget is a class. ?
so you import, you create an instance and insert into layout.It should not be an issue to integrate it with the code you have.
Maybe you already have a layout. else now would be a good time to use one :) -
Hi
but a widget is a class. ?
so you import, you create an instance and insert into layout.It should not be an issue to integrate it with the code you have.
Maybe you already have a layout. else now would be a good time to use one :) -
So how would I create instances of the classes which have multiple widgets and then insert into the layout?
Thanks
@sdf1444
Hi
what you say, classes, you mean normal python classes that use widgets or what do you mean?
I can't answer that as it would be either you create the master class (composite) then (if its a widget) or
you would create each widget by itself if the "class" if not a widget and you don't want to show it.
However, it really depends on what you import. -
@sdf1444
Hi
what you say, classes, you mean normal python classes that use widgets or what do you mean?
I can't answer that as it would be either you create the master class (composite) then (if its a widget) or
you would create each widget by itself if the "class" if not a widget and you don't want to show it.
However, it really depends on what you import.Basically this is an widget created inside a class. So I am importing widgets which are inside a master class. How do I instantiate this, and then insert into a layout?
class App2(QWidget): def init(self): QMainWindow.init(self) pybutton = QPushButton('hi', self) pybutton.resize(200,70) pybutton.move(900, 50) self.show()
-
Well normally one would use App2 as that is the
composite widget.
So often that makes the most sense to use as it will then init the
widget it uses in a proper way. -
Well normally one would use App2 as that is the
composite widget.
So often that makes the most sense to use as it will then init the
widget it uses in a proper way. -
@sdf1444
something like
(import it )layout = QHBoxLayout()
layout.addWidget(App2)
yourwindow.setLayout(layout)
yourwindow.show()Hi
I am getting this error when I add the layout code into pyqt.py: TypeError: addWidget(self, QWidget, stretch: int = 0, alignment: Union[Qt.Alignment, Qt.AlignmentFlag] = Qt.Alignment()): argument 1 has unexpected type 'sip.wrappertype'
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from pyqt2 import *class App(QWidget):
def init(self):
QMainWindow.init(self)layout = QHBoxLayout() layout.addWidget(App2) yourwindow.setLayout(layout) yourwindow.show() pybutton = QPushButton('Click me', self) pybutton.resize(200,70) pybutton.move(400, 50) self.show()
if name == "main":
app = QApplication(sys.argv)
mainWin = App()
sys.exit(app.exec_()) -
Hi
So
app2 is NOT a QWidget ?
i have no idea what "sip.wrappertype" is :) -
@sdf1444
it has to inherit QWidget or be a QWidget to be used in a layout.
Else its plain impossible and you must create the inner Widgets yourself. :)