Scallierung von QtWidgets
@Nobuddy: Und was hat das jetzt damit zu tun das Eingabefelder ihre Grösse nicht ihrem Inhalt anpassen?
Ich möchte wieder zum Eigentlichen zurück kommen.
Mit "window.line_edit_0.resize(400,115)" lässt sich das zumindest manuell bewerkstelligen.
Mit window.line_edit_0.minimumSize() kann ich mir die aktuelle Einstellung der Breite und Höhe anzeigen lassen.
Nur wie bekomme ich die Werte zur Verarbeitung heraus?
Mit "window.line_edit_0.resize(400,115)" lässt sich das zumindest manuell bewerkstelligen.
Mit window.line_edit_0.minimumSize() kann ich mir die aktuelle Einstellung der Breite und Höhe anzeigen lassen.
Nur wie bekomme ich die Werte zur Verarbeitung heraus?
@Nobuddy: Das klingt falsch das Du da irgendwas machen musst. Um Grössen sollte sich das Layout kümmern.
@BlackJack, und wie bekomme ich das Layout dazu?
Auch wenn es falsch ist, ist das bis jetzt meine einzige Lösung:
Auch wenn es falsch ist, ist das bis jetzt meine einzige Lösung:
Code: Alles auswählen
if __name__ == '__main__':
dialog = 'untitled.ui'
app = QtWidgets.QApplication(sys.argv)
window = Ui(dialog)
# Setze Mindestbreite QLineEdit
min_width = 200
min_height = window.line_edit_0.minimumSize().height()
window.resize(min_width, min_height)
width2sign = round((200 / 19), 2)
# Änderung Bezeichnung label_0
window.label_0.setText("Lieferant")
# Text
text = "aaaaaaaaaaaaaaaaa sssssssssssssssssssssss ddd"
# Berechnung und Aktualisierung der Mindestbreite für Text
width = round(len(text) * width2sign)
window.resize(width, min_height)
# Füge Text in QLineEdit ein
window.line_edit_0.setText(text)
result = window.exec_()
@Nobuddy: Ich habe das Gefühl Du willst da sehr komische Sachen machen. Wenn Du am Ende sowieso alle Label und Eigenschaften der Eingabefelder wie die Breite ändern möchtest, dann ist das doch im Grunde fast genau so viel Code als wenn Du gleich den Dialog dynamisch im Programm erstellst.
@BlackJack, klar wäre schön, wenn es da eine bessere Alternative geben würde.
Ich arbeite mit TAB-getrennten Listen.
Wenn es keine Alternative gibt, würde ich den längsten Text der Liste nehmen und dann "window.resize(width, min_height)" aktualisieren.
Ist der Text breiter als screenx, müsste man noch eine x-Scrollbar in Betracht ziehen.
Ich arbeite mit TAB-getrennten Listen.
Wenn es keine Alternative gibt, würde ich den längsten Text der Liste nehmen und dann "window.resize(width, min_height)" aktualisieren.
Ist der Text breiter als screenx, müsste man noch eine x-Scrollbar in Betracht ziehen.
@Nobuddy: Das ist immer noch komisch, ich kenne kein Programm das so etwas macht. Man weiss doch in etwa was die Länge eines Wertes ist. Und wenn sogar die Gefahr besteht, dass der Bildschirm nicht breit genug ist, dann ist ein `LineEdit` ganz einfach nicht das richtige Widget, denn das ist ja auch besch…eiden zu lesen und zu bearbeiten so eine einzelne laaaange Zeile für die man auch noch horizontal scrollen muss.
Na wattn Glueck, dass es so viele Beispiele dafuer gibt, an denen man sich das anschauen kann.
ZB http://www.python-forum.org/viewtopic.php?f=11&t=16817
ZB http://www.python-forum.org/viewtopic.php?f=11&t=16817
Ja das ist es wirklich ...., schönes Beispiel.
Das mit "import *" sollte man aktualisieren.
Das mit "import *" sollte man aktualisieren.
Code: Alles auswählen
from PyQt4.QtCore import Qt, QAbstractTableModel, SIGNAL
from PyQt4.QtGui import QWidget, QTableView, QApplication, QVBoxLayout
@__deets__, hast Du evtl. noch ein Beispiel für Binding?
Die Tabelle in dem Beispiel ist ja schreibgeschützt, was ja nicht verkehrt ist.
Wenn man nun sich einen Datensatz auswählt und mit Enter bestätigt, könnte man ja den Datensatz als Dataset in einer GUI ausgeben lassen, um diesen zu editieren.
Wenn es da etwas in der Richtung schon gebe, wäre ein oder mehrere Beispiele nicht schlecht.
Die Tabelle in dem Beispiel ist ja schreibgeschützt, was ja nicht verkehrt ist.
Wenn man nun sich einen Datensatz auswählt und mit Enter bestätigt, könnte man ja den Datensatz als Dataset in einer GUI ausgeben lassen, um diesen zu editieren.
Wenn es da etwas in der Richtung schon gebe, wäre ein oder mehrere Beispiele nicht schlecht.
Habe mich mit dem Code-Beispiel http://www.python-forum.org/viewtopic.php?f=11&t=16817 auseinander gesetzt.
Manches beginne ich zu verstehen, bei manch anderem fehlt noch der Funke.
PyQt4 wurde ja durch PyQt5 ersetzt. Gibt es evtl., ein in etwa gleiches Code-Beispiel mit PyQt5?
Wie ich gesehen habe, gibt es kein Binding wie bei tk.
Dazu habe ich folgende Infos gefunden:
http://pyqt.sourceforge.net/Docs/PyQt5/
http://pyqt.sourceforge.net/Docs/PyQt5/ ... event.html
https://doc.qt.io/qt-5/qkeyevent.html
Hier habe ich erhebliche Probleme, vielleicht könnte jemand von Euch mir mit ein paar Beispielen helfen, dies beeser zu verstehen?
Manches beginne ich zu verstehen, bei manch anderem fehlt noch der Funke.
PyQt4 wurde ja durch PyQt5 ersetzt. Gibt es evtl., ein in etwa gleiches Code-Beispiel mit PyQt5?
Wie ich gesehen habe, gibt es kein Binding wie bei tk.
Dazu habe ich folgende Infos gefunden:
http://pyqt.sourceforge.net/Docs/PyQt5/
http://pyqt.sourceforge.net/Docs/PyQt5/ ... event.html
https://doc.qt.io/qt-5/qkeyevent.html
Hier habe ich erhebliche Probleme, vielleicht könnte jemand von Euch mir mit ein paar Beispielen helfen, dies beeser zu verstehen?
@Nobuddy: Was willst Du denn damit machen? Nicht das Du am Ende auf dieser Ebene Sachen löst die man eigentlich auf einer höheren Ebene wie `QAction` und dem `shortcut` dort lösen würde.
@BlackJack, da hast Du recht, Qt ist sehr umfangreich ....
Als Grundlage nehme ich das Tabellen-Beispiel von __deets__.
In der Tabelle kann ich mit TAB und den Richtungstasten, den Focus auf eine Zelle setzen. Klicke ich mit der Maus auf eine bestimmte Zelle, wird der Zelleninhalt ausgegeben.
Ich würde nun gerne, den kompletten Datensatz mir ausgeben lassen, wenn ich mit Enter bzw. KP_Enter die ausgewählte Zelle bestätige.
Wie es mit tk funktioniert ist mir bekannt, aber mit Qt habe ich momentan keine Ahnung.
Als Grundlage nehme ich das Tabellen-Beispiel von __deets__.
In der Tabelle kann ich mit TAB und den Richtungstasten, den Focus auf eine Zelle setzen. Klicke ich mit der Maus auf eine bestimmte Zelle, wird der Zelleninhalt ausgegeben.
Ich würde nun gerne, den kompletten Datensatz mir ausgeben lassen, wenn ich mit Enter bzw. KP_Enter die ausgewählte Zelle bestätige.
Wie es mit tk funktioniert ist mir bekannt, aber mit Qt habe ich momentan keine Ahnung.
@Nobuddy: Ich würde sagen da musst Du wohl von `QTableView` erben und beispielsweise `keyReleaseEvent()` überschreiben. Enter kann übrigens mit der vorhandenen Tastenverarbeitung in Konflikt geraten wenn Du die Tabelle bearbeitbar machst.
Edit: Und sollte das letztendlich darauf hinauslaufen, dass Du für die ausgewählte Zeile einen Dialog zum bearbeiten öffnen möchtest, dann würde ich doch über ein `QAction` gehen, denn normalerweise bieten GUIs für so etwas ja eine Schaltfläche und ein Kontextmenü (und meistens auch einen Doppelklick).
Edit: Und sollte das letztendlich darauf hinauslaufen, dass Du für die ausgewählte Zeile einen Dialog zum bearbeiten öffnen möchtest, dann würde ich doch über ein `QAction` gehen, denn normalerweise bieten GUIs für so etwas ja eine Schaltfläche und ein Kontextmenü (und meistens auch einen Doppelklick).
@BlackJack, ja der Gedanke ist einen Dialog zu öffnen, in dem der ausgewählte Datensatz bearbeitet werden kann.
In dem Tabellen-Beispiel sind ja die Zellen schreibgeschützt und das ist auch gut so, denn Änderungen würde ich gerne über einen Dialog machen.
Momentan setzte ich zum Bearbeiten eines Datensatzes aus einer Tabelle in tk, dies mit tk.Checkbutton um. Mit dem tk.Checkbutton wähle ich den betreffenden Datensatz aus und wähle über ein tk.Button, den betreffenden Workshop aus. Ich weiss nicht, ob das mit Qt und Checkbutton auch möglich wäre?
Die Bearbeitung einzelner Zellen erfolgt durch Selektion der Zelle und einem Enter. Dadurch öffnet sich ein Dialog zum Bearbeiten der Zelle.
Ich habe da schon für QAction nach Infos gegoogelt. Die Infos sind für einen Qt-Aussenstehenden nicht ganz verständlich.
Hier habe ich ein Beispiel mit QAction gefunden, mir ist nur noch nicht klar, wo ich da ansetzen muss.
In dem Tabellen-Beispiel sind ja die Zellen schreibgeschützt und das ist auch gut so, denn Änderungen würde ich gerne über einen Dialog machen.
Momentan setzte ich zum Bearbeiten eines Datensatzes aus einer Tabelle in tk, dies mit tk.Checkbutton um. Mit dem tk.Checkbutton wähle ich den betreffenden Datensatz aus und wähle über ein tk.Button, den betreffenden Workshop aus. Ich weiss nicht, ob das mit Qt und Checkbutton auch möglich wäre?
Die Bearbeitung einzelner Zellen erfolgt durch Selektion der Zelle und einem Enter. Dadurch öffnet sich ein Dialog zum Bearbeiten der Zelle.
Ich habe da schon für QAction nach Infos gegoogelt. Die Infos sind für einen Qt-Aussenstehenden nicht ganz verständlich.
Hier habe ich ein Beispiel mit QAction gefunden, mir ist nur noch nicht klar, wo ich da ansetzen muss.
Code: Alles auswählen
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
class menudemo(QMainWindow):
def __init__(self, parent = None):
super(menudemo, self).__init__(parent)
layout = QHBoxLayout()
bar = self.menuBar()
file = bar.addMenu("File")
file.addAction("New")
save = QAction("Save",self)
save.setShortcut("Ctrl+S")
file.addAction(save)
edit = file.addMenu("Edit")
edit.addAction("copy")
edit.addAction("paste")
quit = QAction("Quit",self)
file.addAction(quit)
file.triggered[QAction].connect(self.processtrigger)
self.setLayout(layout)
self.setWindowTitle("menu demo")
def processtrigger(self,q):
print(q.text()+" is triggered")
def main():
app = QApplication(sys.argv)
ex = menudemo()
ex.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()