<div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr">Il giorno mar 7 set 2021 alle ore 13:52 paparucino <<a href="mailto:paparucino@gmail.com">paparucino@gmail.com</a>> ha scritto:</div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div>
    <font face="monospace">One of the first attempts I made was just to
      insert QMainWindow but since there is already a QMainWindow (the
      general of the project) every time I selected a month to view the
      script it triggered a script that had nothing to do with what was
      requested. QtObject is just the last of my attempts and it stayed
      there when I wrote the email.</font></div></blockquote><div><br></div><div>If I understand what you wrote, that happens because you called setupUi on self, as explained in my previous message.<br>If you want to create a *new* window with the given parameters, you should use a new QMainWindow instance (or use a class as in my examples).</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div>
    <p>Why should I use the ui file?</p>
    <p>You wrote "That's one of the many reasons for which files
      generated by pyuic should ** NEVER ** be modified, unless you *
      really * know what you're doing, which assumes you * do * know
      what their classes are and how they work. " Let's start with the
      fact that I struggle to work with the classes and therefore your
      reasoning is impeccable, but to verify if what I did with the
      designer was what I wanted I had to modify the original.
      Everything works as I wish but the problem remains of linking it
      to the rest of the project, just as I wrote above.<br></p></div></blockquote><div>An UI created in designer (both the UI file or the python generated code) is the *base* state of the interface, almost like a template.</div><div>Any aspect that has to be changed at runtime should be then implemented in the logic of the code, based on that "template".<br>If you had to modify the original to verify that the UI is what you wanted, it means that the UI was not created correctly.</div><div><br></div><div>Conceptually, the UI is itself a "class", then you subclass it to add features or modify its behavior. If you have to modify the class for that, it means that the original class was not right in the first place, and since that UI "class" was created in designer, you should use that to change it. And if your UI has to change programmatically, then you should create the UI in order to allow that.<br><br>Altering the pyuic file is not a good idea for many reasons:</div><div>- whenever you have to change even the slightest aspect of the UI, you have to integrate those changes by merging your existing code, which is a painful process that almost always leads to bugs and lots of headaches;</div><div>- it's *not* intended for modification, as it's just a "translation" of the UI xml into python code, and should always behave exactly like using the loadUi function with the same source UI file;<br></div><div><div>- modification usually leads to unexpected behavior if you don't really know what you're doing and how those files work;</div></div><div><br>"Linking to the rest of the project" then means that you start from that "template" and integrate it with the actual, final program logic.</div><div>Let's suppose your program has to show an undefined number of tables based on the contents of a database. This probably means that you should create a UI that has *no* table at all, and only has a placeholder or container that will then be used to put those tables into. In your program you will then actually create those tables according to your needs.</div><div><br>You said that you struggle to work with classes, and I can relate with that: it took me a lot to understand the principle years ago, as my limited programming experience at the time was mostly procedural.</div><div>But Qt and python are object oriented, and knowing how their classes work and how to use them is mandatory.</div><div>As soon as you learn how to deal with them (especially under PyQt) you'll understand that not only it *makes sense*, but it actually (usually) can make things simpler.</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div><p>
    </p>
    <p>A stackoverflow user advised me to use this system because I had
    problems in the first two rows of the tables that would then end up
    in the infamous scrollArea (see:
<a href="https://stackoverflow.com/questions/65493443/qtablewidget-column-span-doesnt-resize-correctly" target="_blank">https://stackoverflow.com/questions/65493443/qtablewidget-column-span-doesnt-resize-correctly</a>)<br></p></div></blockquote><div>I remember that question (I pointed you out to the bug report, which seems resolved but only since Qt6.1).</div><div>While the proposed answer works, a more appropriate and consistent solution could be to override sizeHintForColumn. The following is a very basic implementation, as it doesn't consider more extended aspects and isn't suitable for very large models.</div><div><br></div><div><div><font face="monospace">class TableWidget(QTableWidget):</font></div><div><font face="monospace">    def sizeHintForColumn(self, column):</font></div><div><font face="monospace">        model = self.model()</font></div><div><font face="monospace">        header = self.verticalHeader()</font></div><div><font face="monospace">        opt = self.viewOptions()</font></div><div><font face="monospace">        spanned = False</font></div><div><font face="monospace">        hint = 0</font></div><div><span style="font-family:monospace">        for row in range(model.rowCount()):</span><br></div><div><font face="monospace">            if header.isSectionHidden(row):</font></div><div><font face="monospace">                continue</font></div><div><font face="monospace">            if self.columnSpan(row, column) > 1:</font></div><div><font face="monospace">                spanned = True</font></div><div><font face="monospace">            else:</font></div><div><font face="monospace">                index = model.index(row, column)</font></div><div><font face="monospace">                opt.index = index</font></div><div><font face="monospace">                delegate = self.itemDelegate(index)</font></div><div><font face="monospace">                hint = max(hint, delegate.sizeHint(opt, index).width())</font></div><div><font face="monospace">        if spanned and hint:</font></div><div><font face="monospace">            return hint</font></div><div><font face="monospace">        return super().sizeHintForColumn(column)</font></div></div><div><br></div></div><div>Cheers,</div><div>Maurizio</div>-- <br><div dir="ltr" class="gmail_signature">È difficile avere una convinzione precisa quando si parla delle ragioni del cuore. - "Sostiene Pereira", Antonio Tabucchi<br><a href="http://www.jidesk.net" target="_blank">http://www.jidesk.net</a></div></div></div></div></div>