DearPyGui icon indicating copy to clipboard operation
DearPyGui copied to clipboard

Can `set_primary_window` use `horizontal_scrollbar` feature normally?

Open tattataattt2 opened this issue 2 years ago • 4 comments

Just copy can paste code below can reproduce the issue. horizontal_scrollbar=True but horizontal_scrollbar cannot show in screenshot below.

Code to reproduce the issue

import os
from json import *
from re import *
import argparse
import dearpygui.dearpygui as dpg
from win32api import GetSystemMetrics

xxxxx=GetSystemMetrics (0)
yyyyy=GetSystemMetrics (1)


def global_theme():
    with dpg.theme(tag="theme_id_global"):
        with dpg.theme_component():
            dpg.add_theme_color(dpg.mvThemeCol_Button, (102,102,153), category=dpg.mvThemeCat_Core)
            dpg.add_theme_style(dpg.mvStyleVar_FrameRounding, 5, category=dpg.mvThemeCat_Core)
            dpg.add_theme_style(dpg.mvStyleVar_ButtonTextAlign, 0.00, category=dpg.mvThemeCat_Core)
            dpg.add_theme_style(dpg.mvStyleVar_ScrollbarSize, 30, category=dpg.mvThemeCat_Core)

def START():
    dpg.create_context()
    dpg.create_viewport(width=xxxxx//2,height=yyyyy//10,title='213',vsync=False)#
def END():
    # dpg.create_viewport(title='Custom Title', width=xxxxx-100,height=yyyyy-100)
    dpg.set_primary_window("MAIN_WINDOW",value=True)
    dpg.setup_dearpygui()
    dpg.show_viewport()
    dpg.start_dearpygui()
    dpg.destroy_context() 
class DPG_SCROLL(object):
    def __init__(self):
        self.p=""
    def func(self):
        START()
        with dpg.window(label="MAIN_WINDOW",no_resize=True,no_move  = True, width=xxxxx*0.8, height=yyyyy*0.6,tag="MAIN_WINDOW",horizontal_scrollbar=True,no_scrollbar=False):
            dpg.add_text("horizontal_scrollbar cannot show in after use set_primary_window function...........horizontal_scrollbar cannot show in after use set_primary_window function...........horizontal_scrollbar cannot show in after use set_primary_window function...........horizontal_scrollbar cannot show in after use set_primary_window function.")
            dpg.add_text("vertical_scrollbar is ok.")
            dpg.add_text("vertical_scrollbar is ok.")
            dpg.add_text("vertical_scrollbar is ok.")
            dpg.add_text("vertical_scrollbar is ok.")
            dpg.add_text("vertical_scrollbar is ok.")
            dpg.add_text("vertical_scrollbar is ok.")
            dpg.add_text("vertical_scrollbar is ok.")
            dpg.add_text("vertical_scrollbar is ok.")
            dpg.add_text("vertical_scrollbar is ok.")
            dpg.add_text("vertical_scrollbar is ok.")
            dpg.add_text("vertical_scrollbar is ok.")
            dpg.add_text("vertical_scrollbar is ok.")
            dpg.add_text("vertical_scrollbar is ok.")
            dpg.add_text("vertical_scrollbar is ok.")
            dpg.add_text("vertical_scrollbar is ok.")
            dpg.add_text("vertical_scrollbar is ok.")
            dpg.add_text("vertical_scrollbar is ok.")
            dpg.add_text("vertical_scrollbar is ok.")
            dpg.add_text("vertical_scrollbar is ok.")
            dpg.add_text("vertical_scrollbar is ok.")
            dpg.add_text("vertical_scrollbar is ok.")
            dpg.add_text("vertical_scrollbar is ok.")
            dpg.add_text("vertical_scrollbar is ok.")
            dpg.add_text("vertical_scrollbar is ok.")
            dpg.add_text("vertical_scrollbar is ok.")
            dpg.add_text("vertical_scrollbar is ok.")
            dpg.add_text("vertical_scrollbar is ok.")
            dpg.add_text("vertical_scrollbar is ok.")
        global_theme()
        dpg.bind_item_theme("MAIN_WINDOW","theme_id_global")
        END()
if __name__=='__main__':
    f=[]
    instance=DPG_SCROLL()
    instance.func()

Screenshot of the issue Snipaste_2022-12-16_21-48-31

*Horizontal_scrollbar do not show normally Snipaste_2022-12-16_21-54-37

tattataattt2 avatar Dec 16 '22 13:12 tattataattt2

I got the same issue, but I think I found a workaround. It works if you configure the item after setting it as the primary window :

with dpg.window(tag="Main Window"):
    dpg.add_image("texture_tag", tag="image1")


dpg.set_primary_window("Main Window", True)
dpg.configure_item("Main Window", horizontal_scrollbar=True)

Tetane avatar Mar 27 '23 12:03 Tetane

I got the same issue, but I think I found a workaround. It works if you configure the item after setting it as the primary window :

with dpg.window(tag="Main Window"):
    dpg.add_image("texture_tag", tag="image1")


dpg.set_primary_window("Main Window", True)
dpg.configure_item("Main Window", horizontal_scrollbar=True)

Thanks for your help!!! It works!!! Snipaste_2023-03-31_04-18-46

utmcontent avatar Mar 30 '23 20:03 utmcontent

The root cause is that set_primary_window overrides window->configData.windowflags entirely, instead of fixing just those of them that are needed for the primary window. Until this is fixed, @Tetane's workaround is the way to go.

v-ein avatar Nov 01 '23 13:11 v-ein

Another side effect of set_primary_window is that it can modify other windows, in particulary, by marking the window position as dirty. This affects positioning of modal windows:

  • By default, a modal window is centered by DPG;
  • If a modal window is created with show=False (with the intent of being displayed later), and set_primary_window is called on another window, the modal window will be displayed in top left corner instead of being centered. This is because it gets dirtyPos=true during set_primary_window.

v-ein avatar Apr 20 '24 20:04 v-ein