Hi.
I have written some Python code and is works OK. I now need to, say, interface it better with the user, myself
I got QT Designer and configured some dialogues including a textEdit widget called textEdit_log.
The code which I don’t understand much, looks like this:
from PyQt5.QtWidgets import *
from PyQt5 import uic
def main():
app = QApplication([])
window = PlotGUI()
app.exec_()
if __name__ == '__main__':
main()
class PlotGUI(QMainWindow):
def __init__(self):
super(PlotGUI, self).__init__()
uic.loadUi("PlotGUI.ui", self)
self.show()
self.textEdit_log.append("Hi!")
As a result of last line above “Hi!” shows up in textEdit_log. Perfect
The problem is that I am struggling to find out how can I append text to textEdit_log from outside PlotGUI code, I mean, from ‘regular’ Python code.
Having understood how to solve this problem I will probably solve the other similar difficulties.
I hope this post is according to the rules
Thank you
H. Martins
Don't use
from xxx import * !
You can append text for example by using argv
python3 test.py "Hello World"
test.py
from PyQt5 import QtWidgets
import sys
class PlotGUI(QtWidgets.QMainWindow):
def __init__(self):
super(PlotGUI, self).__init__()
self.textEdit_log = QtWidgets.QTextEdit()
self.setCentralWidget(self.textEdit_log)
self.show()
self.textEdit_log.append("Hi!")
if __name__ == '__main__':
app = QtWidgets.QApplication([])
window = PlotGUI()
if len(sys.argv) > 1:
window.textEdit_log.append(sys.argv[1])
sys.exit(app.exec_())
Hi,
Looks like that solution involves application (itself) callings arguments:
On the other side, I am having the following
self.pushButton_Start.clicked.connect(main_proc)
^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'PlotGUI' object has no attribute 'pushButton_Start'
Looks like it does not recognise the other widgets. Could this be caused by having removed:
from PyQt5.QtWidgets import *
Meanwhile I need to send some data from say Python non-windows code to PlotGUI window's textEdit_log, not command line data.
Thanks
H. Martins
It's hard to answer without knowing the code. How do you run that non-windows code?
(Apr-20-2023, 03:56 PM)Axel_Erfurt Wrote: [ -> ]It's hard to answer without knowing the code. How do you run that non-windows code?
I mean, nothing related with a GUI, just reading and processing data files, writing files, outputing data to a COM port and printing related staff in PyCharm monitor(?) output.
Of course I can do the job if I scratch the code as circumstances change. I could also use the command line to configure software behaviour but it wold be much easier if these parameter would be configured in a GUI and some intermediate processing massages output to a textEdit widget.
I can't find out the proper syntax to send text from say non GUI related code to the GUI code. Looks like something is missing that I am not aware and can't find out.
Suppose I need to send text from one of my previously written (non GUI) functions to a textEdit widget. I can't find out the proper syntax.
Thanks
H. Martins
In
class PlotGUI(QMainWindow):
def __init__(self):
super(PlotGUI, self).__init__()
uic.loadUi("PlotGUI.ui", self)
self.show()
self.pushButton_Start.clicked.connect(main_proc)
self.textEdit_log.append("Hi!")
The line:
self.pushButton_Start.clicked.connect(main_proc)
main_proc() has no relation to the graphical environment. The above line makes it all run. What about having messages in the PlotGUI coming from the main_proc()?
H. Martins
You mean something like this? pushButton_Start receives text from the other script.
from PyQt5 import QtWidgets
import sys
import no_gui
class PlotGUI(QtWidgets.QMainWindow):
def __init__(self):
super(PlotGUI, self).__init__()
self.setGeometry(50, 50, 400, 300)
self.textEdit_log = QtWidgets.QTextEdit()
self.setCentralWidget(self.textEdit_log)
self.pushButton_Start = QtWidgets.QPushButton("Start")
self.pushButton_Start.clicked.connect(self.button_clicked)
self.statusBar().addPermanentWidget(self.pushButton_Start)
self.textEdit_log.append("Hi!")
def button_clicked(self):
returned_text = no_gui.send_text()
self.textEdit_log.append(f"text received from no_gui: {returned_text}")
self.statusBar().showMessage("reading text from no_gui ...")
if __name__ == '__main__':
app = QtWidgets.QApplication([])
window = PlotGUI()
window.show()
sys.exit(app.exec_())
no_gui.py
def send_text():
my_string = "Hello World"
return my_string
I found a solution:
class PlotGUI(QMainWindow):
def __init__(self):
super(PlotGUI, self).__init__()
uic.loadUi("PlotGUI.ui", self)
self.show()
global txt_log # <<<<<<<<<<<<<< these two lines
txt_log = self.textEdit_log # <<<<<<<<<<<<<< these two lines
Then a small aggregating (append + repaint) function
def txt2log(str):
txt_log.append(str)
txt_log.repaint()
And finnaly,
txt2log("appending text")
placed in any other function is doing the job.
Thank you
H. Martins