hoffstadt / DearPyGui

Dear PyGui: A fast and powerful Graphical User Interface Toolkit for Python with minimal dependencies
https://dearpygui.readthedocs.io/en/latest/
MIT License
12.62k stars 669 forks source link

Can `set_primary_window` use `horizontal_scrollbar` feature normally? #1978

Open tattataattt2 opened 1 year ago

tattataattt2 commented 1 year ago

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

Tetane commented 1 year ago

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)
utmcontent commented 1 year ago

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

v-ein commented 8 months ago

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 commented 2 months ago

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: