PyQt: Reorder tabs in QTabWidget - save

I made my GUI using Qt Designer and I have a QTabWidget with multiple tabs. My tabs contain specific tools that are used in my app. Now I would like to set my tabs closable and movable so I could save the order of my tabs and load it when the app starts. The problem is, I don't know how to reorder my tabs when the application loads. Is this possible?

You can move tabs by accessing the QTabBar object associated with the QTabQidget
QTabBar has a method moveTab() which will allow you to reorder tabs.
So you would do something like my_tab_widget.tabBar().moveTab(old_position, new_position) where old_position and new_position are integers which specify the tab to move and the position to move it to respectively.
Lots of details in the c++ documentation (it translates to python pretty easily). See QTabBar docs and QTabWidget docs

Related

Create a window with Lua?

So as the title says I need to make code to create a window and add some content to it, like text, images etc, so Is it possible or not?
(note that window needs to be interactive, that means you can code buttons, progress bars, selection boxes etc.)
You cannot do this in Lua alone. There are plenty of libraries and frameworks available that allow you to create graphical user interfaces.
http://lua-users.org/wiki/GraphicalUserInterfaceToolkits

Embed Menu/PopupMenu or TListItems on a form

Is there any way to embed a TPopupMenu directly on a form, as if it was a panel always open? or maybe just the TMenuItems.
No, it is not possible to embed a menu on a form. The reason is partly that a menu isn't an ordinary window that you can easily manipulate.
So you need to find a different solution. And there are many options you can chose from:
Using a TToolBar:
It doesn't look particularly modern and out of the box you don't get much control over the appearance, though. Also, I don't know exactly how robust this solution is. I stopped using toolbars many years ago.
Using a TCheckListBox:
In this case, I'd recommend you to create a subclass TCheckListBoxEx which toggles an item if you double-click its caption.
Creating a custom control:
This is what I'd do if it is about a central GUI in an important application, because this way you get full control over the appearance and behaviour and can make it really robust. I have done a modern such menu at work, but currently I am at home so I cannot show you it. Here, however, is a menu I made more than ten years ago for a hobby project:
If you don't need the menu to be attached to the form like a control, but only need it not to close when you select an item in it, there are (hacky) ways to achieve that. But that is a different Q.

Picturebox controls and memory

I am planning on using many pictureboxes as controls instead of e.g. buttons, mostly because the controls need to look like icons and not buttons. Would pictureboxes kill memory too much when compared with buttons? Is there a way to make a button appear as an icon instead of a picturebox, that is, can a button be made to look like a .png small icon image file instead of a button with no border?
Lastly, there will be several tabs available to the user via a tabcontrol, each of which has maybe 10-15 pictureboxes that can be clicked on. Is there a shortcut for addhandler if many pictureboxes are used within a tab as a replacement for a buttonbar (no longer supported in VB.NET 2010)?
The button control SUPPORTS pictures already!
Most likely too (more importantly!) the buttonis LIGHTWEIGHT and will consume less memory than pictureboxes
Use the Property sheet to assign the image(s)
You can assign a different image for the button up and down states too!!

Trouble with Non-Native Menu in jQuery Mobile

I have a select that I'd like to use the custom menu display (rather than native) in jQuery Mobile. However, I'm just getting strange behavior out of the non-native menu (jsfiddle link). In this case, the non-native menu is only showing one of my three options.
Found the issue right after I posted it. Every option needs a value attribute set (corrected jsFiddle).
Depending on how many options you have, radio buttons groups might be a better option. The problem with any select is that it requires the user to act before ever seeing what their options are. From a user experience perspective, if you don't have a vast amount of options, use radio buttons. This section of a blog post I wrote might help.

Xbox XNA Navigational logic for UI

I'm developing an application for the XBox using XNA, with a custom made UI framework.
For this I developed a navigation system, the navigation system works as followed:
The system exists of pages, each page contains child UI elements, which all have
one or more PageTabs as I called them.
The pagetabs are objects, having 2 properties, X and Y.
(I know I could have used Point, but the pagetab class has some methods also)
Based on the current state of the system, I check for input, and I raise events on elements with the right pagetab.
So I have this array:
pages[]{
Start,
Exit,
Settings,
...}
Then, I use an enum for my state, like Start, and access the page navigatable elements like this:
pages[Start].Navigatables[]
This is an array containing all the pagetabs of the page. When you go down, Y gets increased, and vice versa. Same for X
This works great, it keeps the max & min Y&X values in mind, so something always get selected.
However, this system has one major flaw, it can only box input for 1 state.
But say I am for example on the start page,
so my state is Start, and I have a popup, with 2 buttons, pagetabs:
(1,1) & (2,1)
The system as it currently is designed, will look for ALL elements in the current state with the selected pagetab, but I need to make it so that if the popup is visible, only the popup accepts navigation, and everything else won't react to user input (gamepad).
I was thinking of adding an extra List to the PageTab class, which contains 'substates' on which the element may accept input, but there must be a better way, ain't there?
I hope I explained it good enough, if you need more info I'll be glad to provide it.
I'd suggest using some kind of flag in your system, so that when you have a pop-up active. it marks all other elements as disabled. then when you close the pop-up you re-enable the other elements. you can check this flag when passing input to the elements so that you only send it to enabled elements.
I went with the extra Z-index approach.
Using a different Z-index for some elements and catching this input works like a charm.
I also added a flag: IndependentNavigation, which makes sure some elements are Z-index-independent (so one could click somewhere different when a dropdown is opened for example)

Resources